1

我正在为 C++ 库添加 C 包装器。在某些情况下,应将用户定义的回调函数传递给库。并且回调函数的原型有引用参数。例如:

typedef void (*callBackFunc)(A& a, B& b);  //A, B are classes

我想在外部头文件中使用下面的 C 原型和包装库中内置的一些帮助函数来解释对象 a 和 b。

typedef void (*callBackFunc)(void *a, void *b);

包装库中的辅助函数:

extern "C" int getValueFromA(void *a) {
    A* pa = (A *)a;
    return pa->value;
}
....

这种方法行得通吗?我不确定参考参数是如何实现的。

4

2 回答 2

3

从 C++ 调用 C 会有些痛苦;试图从 C 调用 C++对非受虐狂来说是非常痛苦的它取决于编译器、运行时版本和许多其他细节。你必须确保你的 C 程序设置了 C++ 环境,构造了所有使用的全局对象,......当你最终让它工作时,下一个编译器将继续运行并破坏你所有的逆向工程工作。

此外,“C 函数引用”根本不存在。需要有趣的脚手架……在栅栏的两边

于 2013-04-14T02:25:18.137 回答
0

传递引用只是问题的一部分。如果 A & B 是 POD 类,那么您可以使用转发 C++ 包装器使其工作,但它可能不符合标准。并且可能会在未来的编译器版本等或不同的编译器中中断。如果 A&B 包含方法,并且回调需要调用这些方法,那就更难了。

于 2013-04-14T04:26:27.703 回答