从C调用C ++代码

时间:2010-03-08 04:47:04

标签: c++ c

有什么办法可以用C代码调用C ++代码吗?

class a
{
  someFunction();
};

如何从C代码中调用someFunction()?换句话说,我在这里问如何避免名称损坏。

1 个答案:

答案 0 :(得分:13)

  1. 首先,将C API包装器写入基于对象的库。例如,如果你有一个带有方法bar()的类Foo,在C ++中你将它称为Foo.bar()。在创建一个C接口时,你必须有一个(全局)函数栏,它接收一个指向Foo的指针(理想情况是以不透明度的void指针的形式)。
  2. 为您在extern“C”中导出的C API包装DECLARATIONS。
  3. (我不记得C ++的所有该死的强制转换操作符并且懒得查找它,所以如果您喜欢以下代码,请使用更具体的转换替换(Foo *)。)

    // My header file for the C API.
    extern "C"
    {
      void bar(void* fooInstance);
    }
    
    // My source file for the C API.
    void bar(void* fooInstance)
    {
      Foo* inst = (Foo*) fooInstance;
      inst->bar();
    }