【发布时间】:2015-09-15 14:08:48
【问题描述】:
有人知道如何根据给定的 C++ 函数签名获取损坏的符号名称吗? 例如:
__stdcall unsigned char MyClass::MyFunc(const int param1, int param2);
会变成:
?MyFunc@MyClass@@QGE@?BHH@Z
使用 Microsoft Visual C++ 编译器时。
我正在考虑一些 WINAPI 功能,但我没有找到任何...
编辑: 好的 - 我知道,这不是一个非常明确的问题。我想要实现的是以下内容:
GetMangledName("__stdcall unsigned char MyClass::MyFunc(const int param1, int param2);");
// Returns "?MyFunc@MyClass@@QGE@?BHH@Z"
【问题讨论】:
-
你是什么意思(重新)装饰?损坏的名称对于函数参数类型是唯一的,它们的损坏方式是编译器实现特定的,并且不能更改,除非您使用不同的参数类型。
-
@πάνταῥεῖ:我编辑了我的问题
-
为什么这个标签是 C#?
-
@crashmstr:因为我一开始就想到了 P/Invokation(因为我的应用程序是用 C# 编写的) - 但后来我想,我也可以在纯 C++ 中做到这一点(但我忘了删除标签).....我将编辑我的问题
-
我认为您实际上不能 P/Invoke 成员函数(更不用说创建 C++ 对象来调用它们了),这就是为什么这样做没有任何意义的原因之一。从 C++ 构建 COM 组件或使用 C++/CLI 是在 C# 中使用面向对象接口的两种常用方法(还有一些其他方法,例如使用 SWIG)。