查找名称错位功能动态加载的DLL(Find name-mangled function in dyn

2019-10-20 00:57发布

我有一组明确设计只在C ++中使用的API。 我不希望他们通过一个C程序(或任何其他语言的这个问题),因此我出口命名空间和类信息可以作为反对去了extern "C"的路线,并使用内联效用函数调用平原C函数。

现在我唯一的工作对在编译时链接DLL文件,这意味着导入功能的可执行文件是很容易的,因为它涉及我本人没有任何的工作。 不过,我打算开发一个插件系统,这将需要我在运行时动态加载的DLL。 请问我能找到使用名称错位C ++函数GetProcAddress()

Answer 1:

你在做什么是不一定是一个好主意,除非你能掌控整个构建链,可以保证双方的DLL和使用它的任何应用程序都使用相同版本相同的编译器的建造。

随着中说,是的,你可以使用加载名称错位功能GetProcAddress 。 只要使用的Dependency Walker还是看你的DLL生成的DEF文件,如果你的编译器设置为产生一个,拿到了错位函数名。 然后你就可以GetProcAddress它。 你可以没有,但是,调用GetProcAddress与未重整的名称,并期望它找到合适的重整名称。 例如,如果你的DLL函数命名为Add ,并错位到_Z3Addv ,你就需要调用GetProcAddress(myDLL, "_Z3Addv"); 正常访问该功能。

您将需要改变调用GetProcAddress每次你改变你的函数的声明时,由于错位的名称也将改变。 要知道,你也需要改变GetProcAddress调用,如果你改变你的DLL是建立与编译器- MSVC的重整是从GCC的很多不同,铛的重整是从两个人可能不同。 所以,你可能要重新考虑你这样做的方式,因为它似乎很容易,一路上打破地方。



文章来源: Find name-mangled function in dynamically-loaded dll