繁体   English   中英

在 Z4A8A08F09D37B73795649038408B5F3 的回调 function 中调用 c++ object

[英]Calling c++ object in callback function of c library

我正在使用一个使用回调函数的 C 库。

有什么方法可以调用 object 的 C++ class?

编辑:

我正在使用 c-client 库。 其中有 function mm_log。

 void mm_log(char* string, long err_flag)

库在内部调用它。 我想检查它被调用的是哪个 Imap stream。

更多信息,您可以从ftp://ftp.cac.washington.edu/imap下载库

所有需要回调的(好)C 库函数都有一个void* user_data指针作为 function 和回调参数的一部分。 您只需将指向 object 的指针传递给 function ,它就会在回调中传回给您。 例子:

typedef void (*callback)(void*);

void dumb_api_call(callback cb, void* user_data){
  cb(user_data);
}

struct Foo{};

void my_callback(void* my_data){
  Foo* my_foo = static_cast<Foo*>(my_data);
}

int main(){
  Foo my_foo;
  dumb_api_call(my_callback, &my_foo);
}

如果mm_log是您正在实现的 function 并且库正在调用(顺便说一句,这是库进行回调的一种糟糕方式),那么您无法让它引用 function 中的 ZC61DZAB.

你可以做的是在调用库之前使用一个全局变量来指向你的 object (并在之后清除),然后在mm_log中使用它来调用所需的方法。 这是令人讨厌和危险的,但可以工作。

如果你有多个线程,那么要格外小心——或者找一个更好的库。

代码对于这样的问题很重要。 但是没有看到你的任何代码,我仍然可以给你一个笼统的声明:)

您必须使用访问普通旧结构的全局函数来包装 C++ object,并使用以下命令导出:

extern "C"

有很多警告,但这是它的要点。

请参阅此常见问题解答: http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM