gpt4 book ai didi

c++ - 使用原始函数名称导出 C++ 函数

转载 作者:行者123 更新时间:2023-11-30 02:51:09 26 4
gpt4 key购买 nike

我正在写一个dll,它导出一个函数

extern "C"
__declspec(dllexport)
std::list<string> create() {
return std::list<string>();
}

编译器提示:

error C2526: 'create' : C linkage function cannot return C++ class 'std::list<_Ty>'

如果我删除外部“C”,导出的函数名称将是:?create@@YA?AV?$list@PAUanalyzer@@V?$allocator@PAUanalyzer@@@std@@@std@@XZ

我希望名字干净,所以加了extern "C",现在冲突了

有没有其他方法可以得到一个干净的函数名?

谢谢。

最佳答案

当您说 extern "C" 时,您告诉编译器创建一个可以从 C++ 以外的其他语言(尤其是 C)调用的函数。但是,除了 C++ 之外,没有其他语言有 std::list,因此它不能创建这样的函数,因为返回类型是 C++ 中函数签名的一部分。如果您不创建具有 C 兼容返回类型(或参数)的函数,则无法创建 extern "C" 函数。

如果您要从 C++ 程序中使用 DLL,则不需要 extern "C" 部分。 C++ 编译器和链接器将能够毫无问题地处理损坏的名称。

关于c++ - 使用原始函数名称导出 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899464/

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