全局外部指针变量在 DLL 中不可见
Posted
技术标签:
【中文标题】全局外部指针变量在 DLL 中不可见【英文标题】:Global extern pointer variable not visible in DLL 【发布时间】:2017-08-03 10:47:20 【问题描述】:我有一个主应用程序 EXE“main.EXE”。我在头文件 globalf.h 中使用 extern 创建了一个全局指针,例如:
globalf.h
extern SomeClass* cPtr;
现在在 Main.EXE 代码中
#include globalf.h
INitialize()
cPtr = new SomeClass(); // works fine.
D.DLL:
#include "globalf.h"
void DllFunc()
cPtr->someFunction1(); // link error unreslved external symbol.
我无法访问 DLL 代码中的全局指针变量,即使 虽然我已经声明了 inMain.EXE 代码。
我知道 main.EXE 的 Initialize() 中的这个声明对 动态链接库。但是我该如何实现呢? C++中有没有办法处理 跨 DLL 和 EXE 的此类全局变量。
【问题讨论】:
您可能应该阅读What happens to global and static variables in a shared library when it is dynamically linked?。也许Sharing a global/static variable between a process and DLL 也是如此。或using global variable in dll and exe. 或者通过搜索exe dll shared global variable
提供的任何链接。
【参考方案1】:
我不会导出全局指针变量,而是将它和您需要在 EXE 和 DLL 之间共享的其他变量打包到一个结构中,然后将指向该结构的指针作为函数参数传递给例如 DLL初始化函数。
// Function exported from the DLL.
// Called by the EXE during initialization.
//
// The DLL receives a pointer to the global state structure,
// shared between the EXE and the DLL.
//
BOOL YourDllInit(GlobalStuff* pGlobal);
【讨论】:
以上是关于全局外部指针变量在 DLL 中不可见的主要内容,如果未能解决你的问题,请参考以下文章
C 语言指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )