c++ - 访问非托管代码中函数的指针

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

我正在创建一个 CLR 项目来访问我的 C 代码。一切正常,直到其中一个 C 函数需要回调。我不确定如何解决这个问题,尝试了几种不同的方法。

C:

typedef void(*logger_callback_t)(const char *, int);

鉴于上述 C 语言,我如何分配此回调?我尝试创建一个函数并引用它但出现错误。如果我将 C++ 函数放在 header 中,它会给出“指向成员的指针对于托管类无效”。如果我把它放在函数旁边,我会得到未声明的标识符

C++:

logger_callback_t logger = &dummy_logger_callback;

void dummy_logger_callback(const char *, int)
{
}

最佳答案

我不是很清楚这个问题,但看起来这是一个声明顺序问题。一种选择可能是在声明函数之前转发声明回调。

static logger_callback_t logger;

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

logger = dummy_logger_callback;

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

关于c++ - 访问非托管代码中函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23246743/

相关文章:

c++ - 枚举类的基础类型别名为整数类型(编译错误)

c++ - 在 C++ CLI 中加载托管 DLL,具体取决于 native dll

c++ - 平面二进制文件中的重定位条目存储在哪里?

c++ - 加载 .dae 文件时出现问题,索引和顶点加载正确

c - 中断未触发。关于为什么会这样的任何想法吗?

objective-c - 宏声明

c - 接受非 ASCII 字符

c++ - C++/CLI 中的模板函数签名解包

c++ - 在 .cpp 文件中包含头文件时基类未定义

c++ - 从 STL 集中删除最大元素