c++ - 混合使用 C 和 C++ 的问题

标签 c++ c

我需要构建一个将函数导出到 C 项目的 C++ 项目 这是我的 C++ 类:

** MyCppClass.h **

class MyCppClass
{
public:
static void MyCppMethod()
}

** MyCppClass.cpp **

void MyCppClass::MyCppMethod(){}

*现在我需要为方法 MyCppMethod(静态)创建一个接口(interface)。

我这样做了: ** 我的导出.h**

#define Export __declspec(dllexport)
extern "C" void Export MyCppMethodWrapper();

** MtExport.cpp**

#include "MyCppClass.h"
#include "MyExport.h"

void MyCppMethodWrapper() { MyCppClass::MyCppMethod();}

就是这样!

现在是 C 部分(不同的项目) 我将项目与 MyExport.lib 链接
** 程序.c**

#include "MyExport.h"        ->does not compile because of the extern "C"
int main()
{
  MyCppMethodWrapper();   

}

如果我不添加行:#include "MyExport.h" 在 program.c 程序编译并工作正常,但我需要为导出提供 header (客户端需要 header ),我想让程序使用那个 header 。我该如何解决???

感谢您的回答

最佳答案

如果你想这样做,你可以很容易地有条件地定义外部:

#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C
#endif

然后:

EXTERN_C Export MyCppMethodWrapper();

关于c++ - 混合使用 C 和 C++ 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2265027/

相关文章:

c++ - 没有类型的 Q_Object

c - 没有关键字的大括号的作用不清楚

c - 加速计算

c - 我如何告诉 gdb 我的零长度数组有多长?

c++ - 比较来自一个 vector 的迭代器时,什么会引发 'iterators are incompatible'?

c++ - 收不到客户端ip地址

由于堆栈溢出,迭代合并排序的 C++ 实现在输入大时崩溃

c++ - 从 QT 窗口打开新窗口?

c - While Loop 永远运行并且不在二分查找中返回

c - 如何在不增加太多开销和复杂性的情况下使您的嵌入式 C 代码不受需求变化的影响?