初めまして。
初心者なんで基本的な質問してしまうかもしれませんがお願いします。
error C2664: 1 番目の引数を 'void (DWORD,PVOID,PVOID)' から 'void (__cdecl *)
(DWORD,PVOID,PVOID)' に変換できません。
というエラーが出ます。
プログラムの内容としては
IDPCOM::RegisterHandler( void (*p_func)(DWORD, PVOID, PVOID), PVOID
in_pvUserContext )
{
…
}
って書いてあるライブラリがあって
IDPCOM g_DPCOM;
if(g_DPCOM.RegisterHandler(DPCOM_MsgReceiveHandler, NULL )==false)
return false;
CMainFrame::DPCOM_MsgReceiveHandler(DWORD dwMessageType, PVOID pMsgBuffer,
PVOID pvUserContext)
{
…
}
って感じです。
過去ログの同じような質問を参考にして、DPCOM_MsgReceiveHandlerの宣言の時に
__cdecl をつけてみましてがエラーは直りませんでした。
どのようにしたらいいのでしょうか?
ご教授願います。
とりあえず、
>DPCOM_MsgReceiveHandler
の宣言側はどうなっているのでしょうか?
宣言側っていうとヘッダーの宣言のことかな?
それだともともとは
void DPCOM_MsgReceiveHandler(DWORD dwMessageType, PVOID pMsgBuffer, PVOID
pvUserContext);
と書いてました。
これをここの過去ログを参考にして
void __cdecl DPCOM_MsgReceiveHandler(DWORD dwMessageType, PVOID pMsgBuffer,
PVOID pvUserContext);
としてみましたがエラーの内容は変わりませんでした。
ん~?
>CMainFrame::DPCOM_MsgReceiveHandler
からクラスのメソッドのように見えるのですが、CMainFrameというnamespaceなのでしょ
うか?
クラスのメソッドであるとき static がついていないと
>1 番目の引数を 'void (DWORD,PVOID,PVOID)' から 'void (__cdecl *)
ではなく__thiscallがうんたらというメッセージになると思ったんだけど。
それと、開発環境は必ず明記しておきましょう。
OS,VCのバージョン,プロジェクトの種類(MFCかCRLかそれ以外か)
失礼しました。
開発環境ですけどOSはXPでバージョンは2003.NETで種類はMFCです
CMainFrameはクラスでDPCOM_MsgReceiveHandlerはメソッドであってます。
> CMainFrameはクラスでDPCOM_MsgReceiveHandlerはメソッドであってます。
焦点は、
DPCOM_MsgReceiveHandlerにstaticがついているか?
です。
付けないと __thiscall になってしまいます。
参考
ロベールのC++教室 - 第57章 メンバ関数ポインタ天国 -
http://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03057.html
まだまだ勉強不足だったようですね。
このサイト見ながらがんばってみます。
ありがとうございました。