c - 访问dll中的全局变量

标签 c windows dll global-variables

如何在 dll 中访问在我的应用程序的 main() 函数中初始化的全局变量?

我的全局变量包含一个关键部分对象,我需要将其锁定在一个 dll 中。

我已经尝试在我的应用程序中导出它并使用它在 dll 中导入

__declspec(dllexport)__declspec(dllimport) 但是当我尝试锁定关键部分时,我得到一个运行异常,这让我认为我的 dll 访问的变量没有正确初始化。

dll 在运行时使用 LoadLibrary 加载。

如有任何提示,我们将不胜感激。

最佳答案

通常从应用程序访问 DLL 中的变量,但看起来您正试图以相反的方式进行访问。而且您从应用程序导出并在 DLL 中导入的方式似乎有点老套。

如何在您的 DLL 中创建一个函数,该函数从您的应用程序中获取指向临界区对象的指针并将其存储在 DLL 自己的全局变量中?

动态链接库:

CRITICAL_SECTION *gCS;

__declspec(dllexport) void MyDLL_SetCS(CRITICAL_SECTION *cs) {
  gCS = cs;
}

应用:

CRITICAL_SECTION cs;
// initialize cs here
MyDLL_SetCS(&cs);

然后 DLL 可以在需要时使用它自己的指针副本。

关于c - 访问dll中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4451920/

相关文章:

java - 使用JNI调用给定DLL文件中定义的函数

c - Renesas 编译错误符号 _FunctionName 多重定义

c++ - 创建不包括标准对象的 DLL

c++ - 充满函数指针的结构是 C++ 二进制兼容性的良好解决方案吗?

Windows 下的 MySQL 数据库操作程序?喜欢 MS Access 或 MS SQL?

c++ - 如何在 Windows 中查找所有连接的可移动 USB 存储设备?

java - 如何清理由 Runtime.exec() 启动的进程?

将 char* 转换为 int

c - Linux/Unix : Non-ascii characters in home directory?

c - do while 1-4 菜单循环不断重复非数字输入