2011-02-23 55 views
0

我全部, 我有一个win32应用程序和几个必须使用全局变量的DLL。在每个DLL我把初始化变量共享beetween dll

extern MYTYPE* myvariable = NULL; 

,并在主程序中我有

MYTYPE* myvariable = NULL; 
mavariable = new MYTYPE(); 
.... 

现在,当DLL加载MYVARIABLE为NULL,我不能使用它。我怎样才能与所有的DLL共享主程序的实例?

+0

DLL无法从EXE导入变量(或函数)。神秘号码1解决的是你如何得到DLL链接。 – 2011-02-23 19:22:17

+0

我链接到win32程序的DLL,我会使用另一个DLL中定义的全局变量,但必须在程序中初始化,以便所有其他DLL可以使用它 – Stefano 2011-02-23 19:29:46

回答

1

你应该在你的程序的一些变化。如果有可能,您可以将EXE中的myvariable移动到DLL中的一个。然后你可以继续使用导入库。

它通常可以从EXE导出函数或数据,但在大多数情况下,这样做的意义不大。所以你可以很少看到这一点。例如WinWord.exe或Excel.exe执行此操作。

如果真的需要从EXE出口frunction或数据,并用它在DLL中,你应该使用动力方面的GetProcAddressGetModuleHandle(NULL)结合。您可以在DllMain内部进行这种手动绑定。您可以在DLL的本地myvariable中保存EXE的地址myvariable

+0

真实变量在DLL中声明并在其他人中定义为extern。在主要我需要在dll和其他dll中初始化变量我可以调用一个方法获取变量实例 – Stefano 2011-02-24 11:41:18

+0

@Stefano:在你的问题的文本中,你写道:“在每个dll中,我把extern MYTYPE * myvariable = NULL“。所以在每个DLL中你都有**分开的**变量。你应该从除了一个拥有变量的DLL之外的所有移除初始化。你应该**从DLL中导出**变量,并在所有其他DLL或EXE中导入**变量。请查看http://support.microsoft.com/kb/90530,其中介绍了如何导出和导入数据。另请阅读http://msdn.microsoft.com/en-us/library/z4zxe9k8.aspx – Oleg 2011-02-24 11:54:18