c++ - 如何将指向成员函数的指针传递给 C 函数?

标签 c++ c function-pointers winpcap calling-convention

<分区>

Possible Duplicate:
Using a C++ class member function as a C callback function

我正在使用 C 库 (winpcap) 编写面向对象的库。我需要将网络数据包到达时调用的回调函数作为函数指针传递。我想将一个成员函数指针传递给 winpcap,以保持我的设计面向对象并允许不同的对象接收不同的数据包。然而,据我所知,成员函数有不同的调用约定,因此不能传递给 C 函数。有没有办法来解决这个问题。我对 boost::bind 的实验(除了反复试验,我几乎无法使用它)没有成果。

有没有办法改变成员函数的调用约定?

这是我现在使用的回调函数的定义以及它实际传递给winpcap

void pcapCallback( byte* param, const struct pcap_pkthdr* header, const byte* pkt_data );

pcap_loop( adhandle, 0, pcapCallback, NULL );

pcap_loop 只是采用函数的名称(目前在全局范围内)。这是函数指针参数的定义(pcap_loop 的第三个参数)。由于这是第三方代码,我无法真正更改它。我必须有一个可以采用这种形式的成员函数:

typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *);

据我了解,成员函数将使用 thiscall 并且 c 函数指针需要一个 cdecl

最佳答案

详细主题请引用

如何实现对静态 C++ 成员函数的回调?

如何实现对非静态 C++ 成员函数的回调?

http://www.newty.de/fpt/callback.html

关于c++ - 如何将指向成员函数的指针传递给 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3108631/

相关文章:

c++ - 放大率低于 125% 默认 Win API(101 - 124% 之间)

c++ - 引用可能比指针更有效吗?

c - 如何使用 RSA_generate_key 始终生成不同的公钥

c - 函数指针参数被忽略/不需要

c - C中的函数指针表

c++ - 如何判断 OpenMP 是否适用于我的 C++ 程序

c++ - 将单个字符转换为 std::string prepends\x01

c - 无法定位 "dereferencing pointer to incomplete type"错误的来源

c - 内核态和用户态编程有什么区别?

c - 函数指针变量声明中的拼写错误,但代码编译