2010-12-06 85 views
0

前提VC++中DLL中的情况下导出/导入全局变量问题

环境: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值同样的(至少真实的话)。

更改后,我无法直接通过调试器访问该值。因此,为了在调试器中看到值,我将其拷贝到临时本地char []变量中。然后,我发现价值之前和价值之后的尾巴哑字符是不同的。

之前:
d:[我的路径] '0'(炭端空)'0' '0' ... 后:
d:[我的路径] '0'(炭端null)'-3''-3''-3'...

感谢您的阅读。

回答

0

自我解决我的问题。

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

所以,这个问题是不相关的导入/导出全局变量,但DLL重新编译问题。

对不起,我的丑陋问题。