我写了一些东西来模拟Windows应用程序的getopt.h库,其中的一部分是全局变量。当我将程序编译为单个应用程序时,此工作正常;然而,当我分离getopt库并链接它时,我的程序开始出现段错误。研究这一点,似乎从DLL外部访问变量不起作用并返回无效指针;有什么我可以解决这个问题吗?跨DLL的C++全局变量
编辑:如果我在DLL在调试器中输入函数,变量是否具有正确的价值 - 直接从应用程序acessing它给出了一个不同的值。
我写了一些东西来模拟Windows应用程序的getopt.h库,其中的一部分是全局变量。当我将程序编译为单个应用程序时,此工作正常;然而,当我分离getopt库并链接它时,我的程序开始出现段错误。研究这一点,似乎从DLL外部访问变量不起作用并返回无效指针;有什么我可以解决这个问题吗?跨DLL的C++全局变量
编辑:如果我在DLL在调试器中输入函数,变量是否具有正确的价值 - 直接从应用程序acessing它给出了一个不同的值。
什么是可能发生的是,你还没有安装的dllexport/dllimport
正确。结果是你最后得到了同一个变量的不同副本。 (一个dll和一个外)
内DLL,你需要dllexport
编译的变量暴露给客户端应用程序。
然后在客户端应用程序,你需要声明相同的变量作为dllimport
。然后它将链接到DLL中的链接。
这是稍微不幸的,因为相同的头文件通常用于DLL和客户端。所以,平时的工作中,周围是这样的:
#ifdef COMPILE_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
编辑:
你能确认是否你有相同的变量的两个副本?尝试从DLL内部和外部打印出地址。
考虑增加一个功能,您的DLL,它返回变量的值。
是否可以从DLL内部和外部打印出变量的地址。这是要找出你是否有一个或两个变量的副本。 – Mysticial
另外,变量是如何设置的?它是一个函数返回一个指针,一个外部暴露的指针,只是一个变量......? – ssube
它只是一个外部暴露的指针。 –