从C++DLL中获取损坏的函数名称
Get functions mangled name from C++ DLL
我有一个声明为__declspec(dllexport) void TakeInput();
的函数
有这个函数的DLL是在C#中导出的。我在执行对这个函数的函数调用时失败,因为在C#代码中找不到入口点。
谷歌搜索显示问题在于并没有提供正确的入口点。我需要为这个函数提供损坏的名称。
所以我想知道怎样才能得到这个函数的名字?
为了避免名称篡改,请使用extern "C"
extern "C" __declspec(dllexport) void TakeInput();
更多阅读:使用extern指定链接
您可以使用DependencyWalker(http://www.dependencywalker.com)或者其他一些列出DLL导出的工具,如果你真的想得到损坏的名称,但你最好按照Armen的建议去做。
与其尝试计算损坏的名称,我建议只导出未损坏的名称。要做到这一点,你需要做两件事:
-
使用C链接为您的函数禁用C++名称篡改您可以使用
extern "C"
来执行此操作。 -
请确保您的函数使用C调用约定。这是默认设置(至少在Microsoft Visual Studio中是这样(,但可以使用
/Gr
(切换__fastcall
调用约定(和/Gz
(切换__stdcall
调用约定(命令行开关更改此默认设置。您可以使用__cdecl
强制执行C调用约定,如下所示:
总之,为了确保您的函数导出为TakeInput
,请使用:
extern "C" __declspec(dllexport) void __cdecl TakeInput();
相关文章:
- 动态构造函数中的新字符 [] 抛出"损坏的顶部大小";
- 调用std::函数成员时内存损坏
- 我的 c 字符串复制函数正在损坏其他变量的堆栈
- 构造函数初始化和对象损坏
- 动态分配时类构造函数中的堆损坏
- 从第三方库导出 cpp 损坏的函数
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- Win32 C API:替代损坏的execl*()系列函数?
- 对于我的类函数,我得到双重释放或损坏错误
- 堆损坏 c++ 返回表指针的函数
- 析构函数会导致堆损坏
- 为什么链表中的数据在嵌套函数中会更改/损坏?
- 有没有一种方法可以使用RTTI获得基于签名的typeinfo损坏的函数名
- 在向量中使用不带复制且没有 noexcept 移动构造函数的对象.实际损坏的内容以及我如何确认它
- 函数的返回类型是损坏名称的一部分吗?
- 当使用实例会员方法作为函数指针时,堆积损坏
- 从 dll 中的函数返回时堆损坏
- 在递归函数中释放内存时堆损坏
- 网关函数损坏了从matlab到c++mex程序的输入
- 我的双向链表中的查找函数损坏