<分区>
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