2011-04-14 26 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

它需要是獨立功能,而不是成員功能。這就是類型不匹配的原因。

相關問題