0

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

我试图在回调中访问命名空间中的函数,但这有一个错误,这让我认为他们不能调用 C++ 代码,我猜这很有意义。但后来我意识到我可以毫无问题地与 C++ 类交互。

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

4

2 回答 2

2

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

extern "C" {
    #include "c_file.h"
}
于 2013-08-21T13:55:27.560 回答
0

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

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

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

于 2013-08-21T13:57:39.220 回答