我有一个 C++ 类,我正在用一些 C 文件编译它。
我想调用一个在 C++ 中定义的函数,实际上是在 C++ 类中,那么我该怎么办?
以下声明表明我在说什么:可能存在语法错误:
串行通信.cpp
class MyClass {
void sendCommandToSerialDevice(int Command, int Parameters, int DeviceId) {
//some codes that write to serial port.
}
}
外部.c
int main(int argc, char ** argv) {
//what am I going to write here?
}
解决此问题的常用方法是提供 C 包装器 API。编写一个 C 函数,它接受一个指向 MyClass
对象的指针(因为 MyClass
不是有效的 C,你需要提供一些名字,最简单的一个是移动 void *
around) 和其余参数。然后在 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代码使用C api创建对象,调用函数并释放对象:
// C
void* myclass = MyClass_create();
MyClass_sendCommandToSerialDevice(myclass,1,2,3);
MyClass_release(myclass);