C ++ динамическая загрузка DLL и функции, определенные в загрузчике - PullRequest
2 голосов
/ 20 апреля 2011

У меня есть Program A (который с открытым исходным кодом, но я не могу изменить его источник) и DLL B, который загружается Program A динамически.

Есть ли способ, чтобы использоватьфункции, определенные в Program A с помощью DLL B?

(может помочь; Program A имеет много заголовочных файлов .h, и все функции, которые мне нужны, определены в этих файлах extern ...)

Ответы [ 3 ]

0 голосов
/ 20 апреля 2011

Если у вас много таких функций, возможно, стоит экспортировать их в другую библиотеку.Я, например, работаю над применением 100 000 строк кода с только 200 в исполняемом файле.

0 голосов
/ 20 апреля 2011

Если ваша A-программа объявляет функции с помощью __declspec (dllexport) или если вы можете скомпилировать вашу A-программу с вашим * .def-файлом, в котором перечислены экспорты DLL, которые вам нужны в вашей DLL B тогда вы можете получить адреса экспортированных функций с помощью GetProcAddress Win32 API-функции (передача дескриптора модуля исполняемого файла, который вы можете получить по имени или иным способом - см. GetModuleHandle , GetModuleHandleEx )

0 голосов
/ 20 апреля 2011

extern определяет, что компоновщик, который генерирует A.exe, может использовать символ.Когда вы хотите получить адрес символа (функция, переменная, ...), символ должен быть экспортирован.Обычно это не делается для программы.

Если ваша программа A.exe не предоставляет указатель или средство для получения указателя на функцию, вы не можете использовать функции программы A.exeв вашей DLL B.

Хотя возможны грязные хаки ...

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