使用C++代码从C代码回调

Callbacks from C code using C++ code?

本文关键字:代码 回调 使用 C++      更新时间:2023-10-16

我使用的是一个用纯C编写的驱动程序。它注册了一些回调。当调用这些回调时,它们将与C++代码交互。

我试图在回调中访问命名空间中的函数,但这给我带来了一个错误,让我认为它们不能调用C++代码,我想这很有道理。但后来我意识到我与C++类的交互没有问题。

那么,在C代码中执行的回调是否允许调用C++特定的函数,如命名空间和类?

您需要将标头#include作为C文件:

extern "C" {
    #include "c_file.h"
}

那么,在C代码中执行的回调是否允许调用C++特定的函数,如命名空间和类?

是的。通常的解决方案是创建一个不透明(void*)对象,该对象包含类的指针,以及在C++代码中声明为extern "C"的一组回调,这些回调接收指向类指针的void *reinterpret_cast,并调用适当的函数。

如果不需要为回调记住类,则可以省去void*reinterpret_cast的内容,但C++中的回调仍需要声明为extern "C",C代码才能调用它们。