2011-04-14 70 views
1

我想实现_set_se_translator。我试着写具有以下签名的函数(从我的.cpp文件 - 当然,我在我的.h文件类似的签名):似乎无法拿出正确的参数_set_se_translator

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

然后我通过这个函数作为参数通过向_set_se_translator写下面的代码:

_set_se_translator(&CIntersonBScan::trans_func); 

我再编译我的代码,并得到以下错误消息:

错误C2664: '_set_se_translator':无法从“无效转换参数1(__ thiscall CIntersonBScan :: *)(无符号整数,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
typedef void (__cdecl *_se_translator_function)(unsigned int, struct _EXCEPTION_POINTERS*); 

这必须是一个免费的功能,或静态成员函数 - 它不能是一个非静态成员函数(因为这些有一个隐藏的隐性this参数 - 和无法比拟的_se_translator_function)。

+0

感谢您的帮助!我将该函数转换为静态函数。我以为我尝试过使用免费站立功能,但看起来我做错了什么。 – 2011-04-15 18:13:36

2

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