afxmsg_.hにおけるerror C2440を回避するには?

解決


トック  2011-11-04 21:29:05  No: 72992  IP: [192.*.*.*]

VC++6.0で作成したプロジェクトをVC++2008でリビルドしようとしていますが、
その際afxmsg_.hの以下の部分でコンパイルエラーが発生してしまいます。
***エラーが発生する箇所***
// for Windows messages
#define ON_MESSAGE(message, memberFxn) \
  { message, 0, 0, 0, AfxSig_lwl, \
    (AFX_PMSG)(AFX_PMSGW) \
    (static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > \
    (memberFxn)) },
****************

***エラーメッセージ*****
 : error C2440: 'static_cast' : 'void (__thiscall CWizardDlg::* )(WPARAM,LPARAM)' から 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)' に変換できません。
1>        スコープ内でこの名前を指定された関数でターゲット型に一致するものはありません。
****************
上記を解決するための情報を、ポインタでもかまいませんのでご教示ください。
OSは、Windows 7(32bit版)を使用しております。

編集 削除
gak  2011-11-05 02:12:07  No: 72993  IP: [192.*.*.*]

void CWizardDlg::xxxxxxxx(WPARAM wParam, LPARAM lParam) {
    :
}

みたいな関数がソースのどっかにある。それを↓のように修正すれば良いかと。

LRESULT CWizardDlg::xxxxxxxx(WPARAM wParam, LPARAM lParam) {
    :
}

上記は WM_APP + ???? 等のウィンドウメッセージに対応した独自ハンドラだと思う。
本来このハンドラ関数の戻り値は LRESULT なのだがVC6時代は何故か void を指定する人達が多数居て、VC6もそれを許容?していた。
トックさんのソースもその類なのではなかろうか。

編集 削除
トック  2011-11-07 21:35:32  No: 72994  IP: [192.*.*.*]

gak 様

ご指摘の通り修正したところ、エラーが解消されました。
ありがとうございました。

また何かございましたらよろしくお願いします。

編集 削除