Инициализируйте переменную, разделяемую между dll - PullRequest
0 голосов
/ 23 февраля 2011

Я все, У меня есть приложение win32 и несколько библиотек DLL, которые должны использовать глобальную переменную. В каждую DLL я положил

extern MYTYPE* myvariable = NULL;

а в основной программе у меня

MYTYPE* myvariable = NULL;
mavariable = new MYTYPE();
....

Теперь, когда DLL загружены, myvariable имеет значение NULL, и я не могу его использовать. Как я могу поделиться экземпляром основной программы со всеми DLL?

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Вы должны внести некоторые изменения в вашу программу. Если это возможно, вы можете просто переместить myvariable из EXE в один из DLL. Затем вы можете продолжать использовать библиотеки импорта.

Как правило, вы можете экспортировать функции или данные из EXE-файла, но в большинстве случаев нет смысла это делать. Так что вы можете видеть это очень редко. Например, WinWord.exe или Excel.exe делают это.

Если вам действительно нужно экспортировать функцию или данные из EXE и использовать их в DLL, вы должны использовать динамическое связывание в отношении GetProcAddress и GetModuleHandle (NULL) . Вы можете сделать такое ручное связывание внутри DllMain . Адрес myvariable EXE-файла можно сохранить в локальной myvariable DLL.

0 голосов
/ 23 февраля 2011

возможно, вы ищете это: Windows & C ++: extern & __declspec (dllimport)

...