我想知道如何摆脱我需要在dll中导出的类函数周围的装饰。例如,当你有这样的事情时:
extern "C"
{
__declspec(dllexport) int __cdecl getWhatever();
}
并且您使用dependencyWalker验证了导出的函数名称,您将拥有完全相同的函数名称。
但是如果你做一个与类相似的东西,会有一堆角色像这样装饰这个函数:
extern "C"
{
class __declspec(dllexport) Toto
{
__cdecl Toto(){}
__cdecl ~Toto(){}
int __cdecl getBlob(float y){return (int)y;}
};
}
在dependencyWalker中你会看到:
... 0Toto @@ @ AAE XZ
... 1Toto @@ @ AAE XZ
... 4Toto @@ @ QAEAAV0 @@ ABV0Ž
?getBlob @ @@托托AAAHM @ Z
那么如何使用程序功能使其干净?
谢谢,
答案 0 :(得分:5)
您不能禁用C ++类的名称修改,也不能在没有修改的情况下导出它们。 C ++类支持需要修改的功能。例如,函数重载。
值得注意的是,mangling是编译器特定的。因此,如果您希望您的类可以被使用不同编译器或甚至不同语言的人访问,那么从DLL导出C ++类是一个糟糕的设计选择。
答案 1 :(得分:0)
不要直接导出类,使用抽象接口,就像COM一样。
以下是一些不错的文章:
Exporting C++ classes from a DLL
,
Binary-compatible C++ Interfaces
&安培;