0

前提

环境: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' ...

谢谢你的阅读。

4

1 回答 1

0

自我解决了我的问题。

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

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

对不起我的丑陋问题。

于 2010-12-08T03:37:07.127 回答