我正在尝试实现_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签名的函数?
答案 0 :(得分:2)
typedef void (__cdecl *_se_translator_function)(unsigned int, struct _EXCEPTION_POINTERS*);
这必须是自由函数或静态成员函数 - 它不能是非静态成员函数(因为它们具有隐藏的隐式this
参数 - 并且不能匹配_se_translator_function
)。
答案 1 :(得分:2)
它需要是一个独立的功能,而不是一个成员功能。这就是类型不匹配的原因。