2010-12-06 3 views
0

ПредусловиеVC++ проблема в ситуации экспорта/импорта глобальных переменных в DLLs

среды: 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 []. И затем я обнаружил, что перед значением и после того, как значение отличается от хвостового фиктивного символа.

перед:
д: [мой путь] '0' (символ конца нуль) '0' '0' ... после:
д: [мой путь] '0' (символ конца null) '-3' '-3' '-3' ...

спасибо, что посмотрели.

ответ

0

самореализовывая моя проблема.

Это связано с тем, что dll не скомпилировалась после того, как моя работа по обработке круговой зависимости.

Итак, эта проблема не связана с глобальной переменной импорта/экспорта, но проблема с повторной компиляцией dll.

Извините за мой уродливый вопрос.