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

c++ dynamic dll loading and functions defined in the loader

本文关键字:加载 定义 函数 动态 DLL c++      更新时间:2023-10-16

我有Program A(它是开源的,但我不能修改它的源代码)和DLL B,它是由Program A动态加载的。

是否有办法使用DLL BProgram A中定义的函数?

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

extern定义生成A.exe的链接器可以使用该符号。当您想要获得符号(函数,变量,…)的地址时,必须导出符号。对于程序,通常不会这样做。

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

如果您有很多这样的函数,那么将它们导出到另一个库可能是值得的。例如,我正在开发一个10万行代码的应用程序,其中只有200行是可执行文件。

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