请在关闭重复问题之前,先阅读问题并看看它为什么不同(提示:是C编译器)
我已经通过谷歌找到了很多关于如何调用C++成员函数的C函数的解释。
它们都类似于这个问题的被接受的答案,来自一个非常高声望的成员。
它说
在头文件中,放置
extern "C" void* MyClass_create() {
return new MyClass;
}
extern "C" void MyClass_release(void* myclass) {
delete static_cast<MyClass*>(myclass);
}
extern "C" void MyClass_sendCommandToSerialDevice(void* myclass, int cmd, int params, int id) {
static_cast<MyClass*>(myclass)->sendCommandToSerialDevice(cmd,params,id);
}
还有,在C代码中,放置
void* myclass = MyClass_create();
MyClass_sendCommandToSerialDevice(myclass,1,2,3);
MyClass_release(myclass);
这似乎很简单,但我不理解的是头文件将需要引用MyClass
(忽略static_cast
),但我想使用 C 编译器(gcc)编译我的 C 代码,而不是 C++ 编译器(g++)。
这不会起作用。我该如何从 C 代码中调用 C++ 成员函数 - 而它是由 C 编译器编译的?
void* MyClass_create();
并调用该函数。如果C++编译器将函数看作extern "C" void* MyClass_create();
,它将使来自C的调用起作用。 - Bo Persson