gpt4 book ai didi

c++ - 在没有函数修饰的情况下导出 dll 中的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:48 24 4
gpt4 key购买 nike

我想知道如何去除我需要在 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@@Z

?getBlob@Toto@@AAAHM@Z

那么如何让它像程序函数一样干净呢?

谢谢,

最佳答案

您不能禁用 C++ 类的名称修饰,并且您不能在不进行修饰的情况下导出它们。 C++ 类支持需要重整的功能。例如,函数重载。

还值得注意的是,改编是特定于编译器的。因此,如果您希望使用不同编译器甚至不同语言的人可以访问您的类,那么从 DLL 导出 C++ 类是一个糟糕的设计选择。

关于c++ - 在没有函数修饰的情况下导出 dll 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com