您不能直接在 C 中调用 C++ 方法。相反,您可以创建一个 C 包装器,然后调用它:
C/C++ 兼容头文件:
#ifdef __cplusplus
extern "C" {
#endif
struct MyClass;
MyClass *new_MyClass();
void MyClass_sendCommandToSerialDevice(MyClass *c, int Command, int Parameters, int DeviceID);
#ifdef __cplusplus
} // extern "C"
#endif
实现(.cpp 文件)
#include "my_c_compatiblity_header.h"
#include "MyClass.h"
extern "C" MyClass *new_MyClass() { return new MyClass(); }
extern "C"
void MyClass_sendCommandToSerialDevice(MyClass *c, int Command, int Parameters, int DeviceID) {
c->sendCommandToSerialDevice(Command, Parameters, DeviceID);
}
主程序
int main(int argc, char ** argv) {
MyClass *c = new_MyClass();
MyClass_sendCommandToSerialDevice(c, 1, 0, 123);
}
当然,由于 C 和 C++ 代码之间的资源和错误处理可能不同,因此您必须弄清楚如何在您的情况下处理组合。例如,上面只是泄漏一个MyClass
对象而不是清理,并且对异常没有做任何事情。