访问指向非托管代码中的函数的指针

时间:2014-04-23 14:02:46

标签: c++ c c++-cli clr

我正在创建一个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)
{
}

2 个答案:

答案 0 :(得分:1)

我对这个问题不是很清楚但似乎这是一个声明订单问题。一个选项可能是转发声明回调,直到声明函数。

static logger_callback_t logger;

static void dummy_logger_callback(const char *, int)
{
}

logger = dummy_logger_callback;

这应该在C上下文中工作,但是如果你的函数是类的方法,或者你的变量是类的成员,那么这会变得更复杂。对于变量和函数,预期的存储类(staticextern等)也很复杂。你能更具体地说明这个设置吗?

答案 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;