我正在创建一个CLR项目来访问我的C代码。它是正常的,直到其中一个C函数需要回调。我不知道如何解决这个问题,尝试过几个不同的事情。
C:
typedef void(*logger_callback_t)(const char *, int);
鉴于上述C语言,如何分配此回调?我尝试过创建一个函数并引用它但却出错了。如果我将c ++函数放在标题中,它会给出"指向成员的指针对于托管类"无效。如果我把它放在函数旁边,我会得到未声明的标识符
C ++:
logger_callback_t logger = &dummy_logger_callback;
void dummy_logger_callback(const char *, int)
{
}
答案 0 :(得分:1)
我对这个问题不是很清楚但似乎这是一个声明订单问题。一个选项可能是转发声明回调,直到声明函数。
static logger_callback_t logger;
static void dummy_logger_callback(const char *, int)
{
}
logger = dummy_logger_callback;
这应该在C上下文中工作,但是如果你的函数是类的方法,或者你的变量是类的成员,那么这会变得更复杂。对于变量和函数,预期的存储类(static
,extern
等)也很复杂。你能更具体地说明这个设置吗?
答案 1 :(得分:0)
该回调应该是一个自由函数,而不是一个成员函数。如果您在课堂上宣布它,请不要。
有效代码可能如下所示:
// at file scope (not inside a class):
extern "C" {
void dummy_logger_callback(const char *, int)
{
// your code here
}
}
// ... and in your existing C++ code:
logger_callback_t logger = &dummy_logger_callback;