前提
环境:VC2005
在我的项目中发现循环依赖时遇到了这个问题(两个dll相互引用),因此将一个dll中的一个划分为两个dll。
举例说明:
typedef struct { <br>
char myFileName[MAX_PATH];
} MyStructure;
前 :
我的头文件.h
MyStructure globalStruct;
后:
我的Common.h
#ifdef _MYGLOBAL_
#define API __declspec(dllexport)
#else
#define API __declspec(dllimport)
#endif
API extern MyStructure globalStruct;
我的全球.c
API MyStructure globalStruct;
MySpecific.c
API MyStructure globalStruct;
更改后代码失败:(此代码在特定 dll 中运行)
handle = LoadLibrary(globalStruct.myFileName);
我确认 globalStruct.myFileName 值是相同的(至少是真实的话)。
更改后我无法直接使用调试器访问该值。所以,为了在调试器中查看值,我复制到临时本地 char[] 变量。然后,我发现拖尾虚拟字符的前值和后值是不同的。
之前:
d:[my path] '0'(char end null) '0' '0' ...
之后:
d:[my path] '0'(char end null) '-3' '-3' ' -3' ...
谢谢你的阅读。