- 締切済み
DirectXによる通信ができなくて困っています。
DirectX9のDirectPlayで通信をしようとしているのですが、セッションへの接続が出来なくて困っています。 言語はC++で開発環境はVisualC++6.0です。プログラムは自分で組んだもので、ピアツーピア型。ホストとピア両方が出来るようにプログラムを組んで、同じプログラムを二つ起動して同一のマシンで実行しています。 接続が出来ない原因を調べたところ以下のセッションへの接続部分でプログラムが1~2分ほど固まり、その後接続に失敗していました。 hr = lpDirectPlay8Peer->Connect(&dpnAppDesc2, prgHostAddr,prgDeviceInfo2, NULL, NULL, NULL, 0, NULL, NULL, NULL,DPNCONNECT_OKTOQUERYFORADDRESSING | DPNCONNECT_SYNC); 接続に失敗した後、このエラー処理で接続に失敗した事は分かるのですが原因が分かりません。又、アドレスの設定やホストが確立しているかも同様の方法でエラーの判断をしています。 if (FAILED(hr)) //エラー処理 {MessageBox("セッションの接続に失敗", "PeerVoice", MB_OK | MB_ICONWARNING);} else {MessageBox("セッションの接続に成功", "PeerVoice", MB_OK | MB_ICONWARNING);} MSDNのIDirectPlay8Peer::Connectメソッドの項を見るとエラー時の戻り値でエラー原因が分かるようなので以下の様なコードを書きました。 switch (hr){ case S_OK: MessageBox("成功1", "PeerVoice", MB_OK |MB_ICONWARNING); break; case DPNSUCCESS_PENDING:("成功2", "PeerVoice", MB_OK |MB_ICONWARNING);break; case DPNERR_HOSTREJECTEDCONNECTION: MessageBox("失敗1", "PeerVoice", MB_OK | MB_ICONWARNING);break; case DPNERR_INVALIDAPPLICATION : MessageBox("失敗2", "PeerVoice", MB_OK | MB_ICONWARNING);break; case DPNERR_INVALIDDEVICEADDRESS : MessageBox("失敗3", "PeerVoice", MB_OK | MB_ICONWARNING); break; case DPNERR_INVALIDFLAGS: MessageBox("失敗4", "PeerVoice", MB_OK | MB_ICONWARNING);break; case DPNERR_INVALIDHOSTADDRESS: MessageBox("失敗5", "PeerVoice", MB_OK | MB_ICONWARNING);break; case DPNERR_INVALIDINSTANCE: MessageBox("失敗6", "PeerVoice", MB_OK | MB_ICONWARNING);break; case DPNERR_INVALIDINTERFACE: MessageBox("失敗7", "PeerVoice", MB_OK | MB_ICONWARNING);break; case DPNERR_INVALIDPASSWORD: MessageBox("失敗8", "PeerVoice", MB_OK | MB_ICONWARNING); break; case DPNERR_NOCONNECTION: MessageBox("失敗9","PeerVoice", MB_OK| MB_ICONWARNING);break; case DPNERR_NOTHOST: MessageBox("失敗10", "PeerVoice", MB_OK|MB_ICONWARNING);break; case DPNERR_SESSIONFULL: MessageBox("失敗11", "PeerVoice",MB_OK| MB_ICONWARNING);break; default: MessageBox("失敗0", "PeerVoice",B_OK|MB_ICONWARNING);break; } しかし、これでもdefaultの失敗0のメッセージボックスが出てきてしまいます。何かの設定ミスやホストがいないのなら上記のエラー処理で原因が特定できると思ったのですが、全くわけが分かりません。どうか理由が分かる方回答をお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- aris-wiz
- ベストアンサー率38% (96/252)
エラーコードをトラップするのに全部やっていては漏れがあるかも しれませんし数が半端ではありません。 char WarnnigString[1024]; sprintf( WarnnigString, "hr=%x", hr ); MessageBox( WarnnigString, NULL, B_OK|MB_ICONWARNING); とでもしてVCツールのErrorLockupで値をエラー検索すれば、 何かわかるかもしれません。
補足
ご指摘通り試して見た所、80158510という値が返ってきていました。当たり前ですが、0ではないのでやはり失敗しているようです。 念のためホストを立てる、ホストを立てない、の両方試したのですが同じ値が帰ってきたのでホストが立っていないか接続する側の設定が間違っているのではないかと思い、もう一度見直してみたのですが、やはり原因が分かりませんでした。 80158510について調べてみたのですが、ErrorLockupの意味が分からず、インターネットで検索し、ヘルプも見たのでしたが分かりませんでした。 無知ですみませんがErrorLockupとは何なのでしょうか? 解決していないので引き続き回答を募集させていただきます。