当前位置:  开发笔记 > 编程语言 > 正文

在没有标题的情况下调用c ++ dll中的函数

如何解决《在没有标题的情况下调用c++dll中的函数》经验,为你挑选了3个好方法。

我想从一个DLL调用一个方法,但我没有源文件头文件.我试图使用dumpbin/exports来查看方法的名称,但我可以找到方法签名?

有没有办法调用这种方法?

谢谢,



1> zdan..:

如果函数是C++函数,则可以从损坏的名称派生函数签名.Dependency Walker是一个可以为您完成此任务的工具.但是,如果DLL是使用C链接创建的(Dependency Walker会告诉你),那么你就不走运了.



2> dirkgently..:

C++语言对dll一无所知.

这是在Windows上吗?一种方法是:

depends.exe随附(Visual Studio)打开dll

验证要调用的函数的签名

使用LoadLibrary()得到加载这个DLL(小心的路径)

用于GetProcAddress()获取指向要调用的函数的指针

使用此指针到函数来使用有效参数进行调用

使用FreeLibrary()以释放手柄

BTW:此方法通常也称为运行时动态链接,而不是编译时动态链接,您可以使用关联lib文件编译源.

*nixes有一些类似的机制dlopen,但之后我的记忆开始失败.有些东西叫objdumpnm应该让你开始检查功能.



3> 小智..:

如您所见,DLL中的导出列表仅存储名称,而不存储签名.如果您的DLL导出C函数,您可能必须对这些函数进行反汇编和反向工程以确定方法签名.但是,C++会对导出名称中的方法签名进行编码.将方法名称和签名组合在一起的过程称为"名称重整". 此Stackoverflow问题有一个参考,用于从损坏的导出名称确定方法签名.

尝试免费的"Dependency Walker"(又名"依赖")实用程序."Undecorate C++ Functions"选项应确定C++方法的签名.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有