vc ++ проблема в ситуации экспорта / импорта глобальных переменных в dll - PullRequest
0 голосов
/ 06 декабря 2010

Условие

среда: 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 совпадают (по сути, реальные слова).

Я не могу получить доступ к значению напрямую с помощью отладчика после изменения. Итак, чтобы увидеть значение в отладчике, я скопировал в переменную temp local char []. И потом, я обнаружил, что значения до и после различаются в зависимости от фиктивных символов.

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

спасибо за чтение.

1 Ответ

0 голосов
/ 08 декабря 2010

сам решил мою проблему.

Это потому, что dll не перекомпилируется после моей работы по удалению циклических зависимостей.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...