• ベストアンサー

winsock2 非同期処理について

教えてください。 winsockを使用して、ネットワーク間のアプリを作成しているのですが、 wndPorcが処理されないため困っています。 お分かりになる方教えてくださいませ。 送信側はメッセージを送っていますが、受信側のaccept処理が出来ません。(wndProcが呼ばれない) wndPorc関数って呼び出しって必要でしたか??? [環境] OS windows2000 Visual C++ 6.0 MFC [ソース] [.cpp内部] bool CSysCp02Dlg::NetWork_LogOn() { struct sockaddr_in server; // winsock初期処理 // ソケット作成 // 非同期処理 if(WSAAsyncSelect(server_s,this->m_hWnd,FM_TCPPROC,FD_ACCEPT|FD_CONNECT|FD_READ|FD_WRITE|FD_CLOSE) == SOCKET_ERROR){  return false; } // 構造体をクリア // 設定 // bind処理 // 受付開始(listen処理) return true; } LRESULT CALLBACK CSysCp02Dlg::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) <----ここの関数が処理されない。 { struct sockaddr_in client; int n; char Recv_Buffer[RECV_SIZE]; int nLength = sizeof(client); switch(message) { case FM_TCPPROC: switch( lParam ){ case FD_ACCEPT: client_s = accept(server_s, (struct sockaddr *)&client, &nLength); if(client_s == INVALID_SOCKET){ ErrNum = WSAGetLastError(); } break; } } return WndProc(hWnd, message, wParam, lParam); } 800文字以内に入りきらないため、略してあります。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

MFCなのになんで自分でウィンドウプロシージャ記述してるんですか? CSysCp02DlgってCDialogの派生クラスじゃないんですか? メッセージハンドラ追加するだけだと思うんですが。

poposan
質問者

お礼

ありがとうございます。 完全に勉強不足です。 知りませんでした。 まさか、windowProcなどというものが存在するとは... 大変勉強になりました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>まさか、windowProcなどというものが存在するとは... ですからぁ、MFCなんですからそんなのをオーバーライドするんじゃなくて、メッセージマップに追加してくださいよ。 ON_MESSAGEですよ。 http://www.microsoft.com/japan/developer/library/vcmfc/_mfcnotes_tn006.htm

すると、全ての回答が全文表示されます。
noname#11722
noname#11722
回答No.2

ん~CALLBACKで取るのは分からんが・・・ PreTranslateMessageでやればいいんでないかと思うのだが・・・ これでどうだ? BOOL CSysCp02Dlg::PreTranslateMessage(MSG* pMsg) {   if(pMsg->message==WSOCK_SELECT){     switch(WSAGETSELECTEVENT(pMsg->lParam)){     case FD_ACCEPT: // 処理;       break;     }   }   return CDialog::PreTranslateMessage(pMsg); } あ、コピペするときは全角文字消してね

poposan
質問者

お礼

ありがとうございました。 PreTranslateMessageを知りませんでした。 わからなかったのでいろいろ調べていたのですが、PreTranslateMessageを使っているのは初めてです。 大変勉強になりました。

すると、全ての回答が全文表示されます。

関連するQ&A