DLL函数名称使用dumpbin.exe

我已经在Visual Studio 2010中编写了一个包含许多函数和类的.dll库。当我查看文件的内容时:

dumpbin.exe /EXPORTS myDll.dll 

我使用某种函数位置指针获取长的函数名,如下所示(在.dll中的第二项):

  2 1 0001100A ?Initialize@codec@codecX@@SANNN@Z = @ILT+5(?Initialize@codec@codecX@@SANNN@Z) 

这在某种程度上很难阅读,但是我从其他.dll-s中看到了“更好的”过程/函数列表,如下所示:

 141 8C 00002A08 PogoDbWriteValueProbeInfo 

我怎样才能让这个.dll列表看起来像这样?

PS:我的dll源代码如下所示:

 namespace codecX { class codec { public: static __declspec(dllexport) double Initialize(double a, double b); ... 

Solutions Collecting From Web of "DLL函数名称使用dumpbin.exe"

您需要将这些静态成员函数拉入全局地址空间,然后用extern“C”来包装它们。 这将抑制C ++的名称mangling,而不是给你C名称mangling这不难看:

 extern "C" __declspec(dllexport) Initialize(double a, double b) { codec::Initialize(a, b); } 

然后删除静态成员函数中的__declspec(dllexport):

 class codec { public: static double Initialize(double a, double b); } 

这就是所谓的名字重组 ,当你用C ++编译器编译C ++时会发生这种情况。 为了保留“humand可读”名称,在声明和定义类和函数时,必须使用extern "C" 。 即

 extern "C" void myFunction(int, int); 

看到这里 ,还有谷歌mixing C and C++