gpt4 book ai didi

跨 DLL 的 C++ 全局变量

转载 作者:可可西里 更新时间:2023-11-01 09:46:11 25 4
gpt4 key购买 nike

我写了一些东西来模拟 Windows 应用程序的 getopt.h 库,其中一部分是全局变量。当我将程序编译为单个应用程序时,这工作得很好;然而,当我分离出 getopt 库并链接到它时,我的程序开始出现段错误。对此进行调查,似乎从 DLL 外部访问变量不起作用并返回无效指针;我能做些什么来解决这个问题吗?

编辑:如果我在调试器的 DLL 中输入一个函数,该变量具有正确的值 - 直接从应用程序访问它会得到不同的值。

最佳答案

可能发生的情况是您没有正确设置 dllexport/dllimport。结果是您最终得到同一变量的不同拷贝。 (一个在DLL里面,一个在外面)

在 DLL 中,您需要使用 dllexport 进行编译,以将变量公开给客户端应用程序。

然后在客户端应用程序中,需要声明与dllimport相同的变量。然后它将链接到 DLL 中的那个。

这有点不幸,因为相同的 header 通常用于 DLL 和客户端。所以通常的解决方法是:

#ifdef COMPILE_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif

编辑:

你能确认你是否有同一个变量的两个拷贝吗?尝试打印出 DLL 内部和外部的地址。

关于跨 DLL 的 C++ 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7478791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com