2010-12-06 62 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重新編譯問題。

對不起,我的醜陋問題。