c++ - 如何从 C 调用 C++ 方法?

标签 c++ c class extern

<分区>

我有一个 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);

关于c++ - 如何从 C 调用 C++ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14815274/

相关文章:

c++ - 想要使用 sstream 解析 int 的字符串输入

Javascript:类构造函数基础知识 - 在单独的方法中定义属性

c++ - C++ 项目和库的正确结构

c++ - 递归回文问题的时间复杂度,C++

c - 如何要求 autotools 项目/获取 autotools 包的 cflags?

c - 用 C 中的另一个矩阵滚动一个矩阵

java - 内核线程定时器中断的优先级队列实现

java - Android 找不到类 java.awt.datatransfer.StringSelection?尝试将字符串放在剪贴板上

c++ - 带 boost 的类型列表

c - 'goto' 是否适合在 C(而非 C++)中正确使用堆栈变量