情境中的vc ++问题导出/导入dll中的全局变量

时间:2010-12-06 04:07:13

标签: visual-c++ dllimport dllexport

前提条件

环境:VC2005

我在项目中发现循环依赖时遇到了这个问题(两个dll相互引用),所以将一个dll中的任何一个分成两个dll。

用例子说明:

typedef struct { <br>
    char myFileName[MAX_PATH];
} MyStructure;

之前:

MyHeader.h

MyStructure globalStruct;

后:

MyCommon.h

#ifdef _MYGLOBAL_
#define API __declspec(dllexport)
#else
#define API __declspec(dllimport)
#endif

API extern MyStructure globalStruct;

MyGlobal.c

API MyStructure globalStruct;

MySpecific.c

API MyStructure globalStruct;

更改后代码失败:(此代码在特定的dll中运行)

handle = LoadLibrary(globalStruct.myFileName);

我确认globalStruct.myFileName值相同(至少是真实的单词)。

更改后我无法直接使用调试器访问该值。所以,为了在调试器中看到值,我将其复制到temp local char []变量。然后,我发现之前的价值和价值在拖尾虚拟字符中是不同的。

之前:
d:[我的路径]'0'(字符结束null)'0''0'... 后:
d:[我的路径]'0'(字符结束为空)' - 3''-3''-3'...

谢谢你的阅读。

1 个答案:

答案 0 :(得分:0)

自我解决了我的问题。

这是因为在我的循环依赖删除工作之后,dll不会重新编译。

所以,这个问题与导入/导出全局变量无关,而是dll重新编译问题。

对不起我的丑陋问题。