__cdeclのコンパイルエラー – プログラミング – Home

__cdeclのコンパイルエラー
 
通知
すべてクリア

[解決済] __cdeclのコンパイルエラー


OIT
 OIT
(@OIT)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

初めまして。
初心者なんで基本的な質問してしまうかもしれませんがお願いします。

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 をつけてみましてがエラーは直りませんでした。

どのようにしたらいいのでしょうか?
ご教授願います。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

とりあえず、
>DPCOM_MsgReceiveHandler
の宣言側はどうなっているのでしょうか?


返信引用
OIT
 OIT
(@OIT)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

宣言側っていうとヘッダーの宣言のことかな?
それだともともとは
void DPCOM_MsgReceiveHandler(DWORD dwMessageType, PVOID pMsgBuffer, PVOID
pvUserContext);
と書いてました。
これをここの過去ログを参考にして
void __cdecl DPCOM_MsgReceiveHandler(DWORD dwMessageType, PVOID pMsgBuffer,
PVOID pvUserContext);
としてみましたがエラーの内容は変わりませんでした。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ん~?

>CMainFrame::DPCOM_MsgReceiveHandler
からクラスのメソッドのように見えるのですが、CMainFrameというnamespaceなのでしょ
うか?

クラスのメソッドであるとき static がついていないと
>1 番目の引数を 'void (DWORD,PVOID,PVOID)' から 'void (__cdecl *)
ではなく__thiscallがうんたらというメッセージになると思ったんだけど。

それと、開発環境は必ず明記しておきましょう。
OS,VCのバージョン,プロジェクトの種類(MFCかCRLかそれ以外か)


返信引用
OIT
 OIT
(@OIT)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

失礼しました。
開発環境ですけどOSはXPでバージョンは2003.NETで種類はMFCです

CMainFrameはクラスでDPCOM_MsgReceiveHandlerはメソッドであってます。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> CMainFrameはクラスでDPCOM_MsgReceiveHandlerはメソッドであってます。
焦点は、

DPCOM_MsgReceiveHandlerにstaticがついているか?

です。
付けないと __thiscall になってしまいます。

参考
ロベールのC++教室 - 第57章 メンバ関数ポインタ天国 -
http://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03057.html


返信引用
OIT
 OIT
(@OIT)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

まだまだ勉強不足だったようですね。
このサイト見ながらがんばってみます。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました