前提条件
环境: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'...
答案 0 :(得分:0)
自我解决了我的问题。
这是因为在我的循环依赖删除工作之后,dll不会重新编译。
所以,这个问题与导入/导出全局变量无关,而是dll重新编译问题。
对不起我的丑陋问题。