似乎无法为_set_se_translator提出正确的参数

时间:2011-04-14 21:38:35

标签: c++ winapi

我正在尝试实现_set_se_translator。我尝试用以下签名编写一个函数(来自我的.cpp文件 - 当然,我的.h文件中有类似的签名):

 void CIntersonBScan::trans_func(unsigned int u, EXCEPTION_POINTERS* pExp)

然后我通过编写以下代码将此函数作为参数传递给_set_se_translator:

 _set_se_translator(&CIntersonBScan::trans_func);

然后我编译我的代码并收到以下错误消息:

错误C2664:'_ set_se_translator':无法将参数1从'void(__ thiscall CIntersonBScan :: *)(unsigned int,EXCEPTION_POINTERS *)'转换为'_se_translator_function'

在eh.h文件中,我找到了_se_translator_function的以下定义:

 typedef void (__cdecl *_se_translator_function)(unsigned int, struct _EXCEPTION_POINTERS*);

我尝试改变trans_func的签名并仍然得到相同的错误消息。我已经设置了/ EHa编译选项。如何创建一个实际匹配_se_translator_function签名的函数?

2 个答案:

答案 0 :(得分:2)

typedef void (__cdecl *_se_translator_function)(unsigned int, struct _EXCEPTION_POINTERS*);

这必须是自由函数或静态成员函数 - 它不能是非静态成员函数(因为它们具有隐藏的隐式this参数 - 并且不能匹配_se_translator_function)。

答案 1 :(得分:2)

它需要是一个独立的功能,而不是一个成员功能。这就是类型不匹配的原因。