gpt4 book ai didi

c++ - extern C 返回类对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:20 25 4
gpt4 key购买 nike

我想要一个插件,使用更简单的名称来解析其他 C++ 代码。

class B {
};

extern "C" B foo(); // to avoid name mangling in order to be loaded by dlsym

并且在程序的另一部分(也是 C++ 并且与插件共享相同的类 B 定义):

B (*func)();
func = dlsym("/path/to/so", "foo");
B m = func();

这样的代码是否会导致任何问题,即是否允许(按照标准)在 extern "C" 函数中使用 C++ 类作为参数或返回类型?它似乎适用于我的 gcc,但其他人呢?

最佳答案

这应该可行,但有几个条件:

  • 如果您打算将 B 类的定义转换为其他定义,那将行不通。您唯一可以更改的是 foo() 的定义。
  • 插件和加载程序必须就二进制级别的 B 类接口(interface)达成一致。切换编译器(包括版本和一些标志)可以改变这个接口(interface)。
  • 您显然必须在 C++ 中强制转换 dlsym() 的返回值。
  • 在 C 中使用类是不可能的。

关于c++ - extern C 返回类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14548947/

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