Tom*_*miL 8 c++ windows dll visual-studio-2010
我在visual studio 2010中编写了一个包含大量函数和类的.dll库.当我查看文件的内容时:
dumpbin.exe /EXPORTS myDll.dll
Run Code Online (Sandbox Code Playgroud)
我用一些函数位置指针得到很长的函数名,看起来像这样(.dll中的第二个条目):
2 1 0001100A ?Initialize@codec@codecX@@SANNN@Z = @ILT+5(?Initialize@codec@codecX@@SANNN@Z)
Run Code Online (Sandbox Code Playgroud)
这在某种程度上难以阅读,但我从其他.dll-s看到了"更好"的程序/功能列表,如下所示:
141 8C 00002A08 PogoDbWriteValueProbeInfo
Run Code Online (Sandbox Code Playgroud)
我怎么能让那个.dll列表看起来那样?
PS:我的dll源代码如下所示:
namespace codecX
{
class codec
{
public:
static __declspec(dllexport) double Initialize(double a, double b);
...
Run Code Online (Sandbox Code Playgroud)
您需要将这些静态成员函数拉入全局地址空间,然后使用extern"C"包装它们.这将抑制C++名称修改,而是给你C名称修改,这不是那么难看:
extern "C" __declspec(dllexport) Initialize(double a, double b)
{
codec::Initialize(a, b);
}
Run Code Online (Sandbox Code Playgroud)
然后删除静态成员函数上的__declspec(dllexport):
class codec
{
public:
static double Initialize(double a, double b);
}
Run Code Online (Sandbox Code Playgroud)
这称为名称修改,当您使用 C++ 编译器编译 C++ 时会发生这种情况。为了保留“人类可读”的名称,您extern "C"在声明和定义类和函数时必须使用。IE
extern "C" void myFunction(int, int);
Run Code Online (Sandbox Code Playgroud)
请参阅此处以及谷歌mixing C and C++。
| 归档时间: |
|
| 查看次数: |
23141 次 |
| 最近记录: |