【问题标题】:Initialize variable shared beetween dlls初始化 dll 之间共享的变量
【发布时间】:2011-02-23 18:40:00
【问题描述】:

我都, 我有一个 win32 应用程序和几个必须使用全局变量的 DLL。在我放置的每个 dll 中

extern MYTYPE* myvariable = NULL;

在我的主程序中

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

现在,当加载 DLL 时,myvariable 为 NULL,我无法使用它。如何与所有 DLL 共享主程序的实例?

【问题讨论】:

  • DLL 无法从 EXE 中导入变量(或函数)。要解决的第 1 个谜团是如何让 DLL 链接。
  • 我将 DLL 链接到 win32 程序,我将使用在另一个 DLL 中定义但必须在程序中初始化的全局变量,以便所有其他 dll 都可以使用它

标签: c++ dll environment-variables shared extern


【解决方案1】:

您应该对您的程序进行一些更改。如果可能的话,您可以将myvariable 从 EXE 移动到 DLL 中的一个。然后就可以继续使用导入库了。

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

如果确实需要从 EXE 中导出函数或数据并在 DLL 中使用,则应针对 GetProcAddressGetModuleHandle(NULL) 使用 动态绑定。您可以在DllMain 内进行此类手动绑定。 EXE的myvariable的地址可以保存在DLL的本地myvariable中。

【讨论】:

  • 真正的变量在 DLL 中声明,在其他变量中定义为 extern。主要我需要初始化 dll 中的变量,在其他 dll 中我可以调用一个获取变量实例的方法
  • @Stefano:在您的问题文本中,您写道“在每个 dll 中,我将 extern MYTYPE*​​ myvariable = NULL”。所以在每个 DLL 中你都有 separate 变量。您应该从拥有该变量的一个 DLL 之外的所有 DLL 中删除初始化。您应该从 DLL 中导出变量并在所有其他 DLL 或 EXE 中导入变量。查看support.microsoft.com/kb/90530,它描述了如何导出和导入数据。另请阅读msdn.microsoft.com/en-us/library/z4zxe9k8.aspx
【解决方案2】:

也许你正在寻找这个:Windows & C++: extern & __declspec(dllimport)

【讨论】:

  • 不,我只需要用相同的MYTYPE实例初始化每个dll中的变量
猜你喜欢
  • 2020-04-08
  • 2016-03-08
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
相关资源
最近更新 更多