c ++动态dll加载和加载器中定义的函数

时间:2011-04-20 11:09:46

标签: c++ dll

我有Program A(这是开源,但我无法修改其来源)和DLL B,它由Program A动态加载。

有没有办法,Program A使用DLL B中定义的函数?

(可能有帮助; Program A有很多.h头文件,我需要的所有功能都在这些中定义extern ...)

3 个答案:

答案 0 :(得分:0)

extern定义生成A.exe的链接器可以使用该符号。如果要获取符号的地址(函数,变量,...),则必须导出符号。这通常不适用于程序。

如果您的程序A.exe没有为您提供指针或方法来获取指向函数的指针,则您无法在DLL B中使用程序A.exe的函数。

虽然可能有肮脏的黑客......

答案 1 :(得分:0)

如果您有很多这样的功能,可能值得将它们导出到其他库。例如,我正致力于在可执行文件中应用100 000行代码,只有200行代码。

答案 2 :(得分:0)

如果您的A程序使用__declspec(dllexport)声明函数,或者您是否能够使用* .def文件编译A程序,该文件列出了DLL中需要的DLL导出然后您可以通过GetProcAddress Win32 API函数获取导出函数的地址(传递可通过名称或其他方式获取的可执行文件的模块句柄 - 请参阅GetModuleHandleGetModuleHandleEx