現在DirectPlayでネットワーク通信をするプログラムを作成中ですが、ホスト(Host)の作成で失敗します。
Host関数の戻り値は、-2146073024が戻り値として返ってきています。
DirectPlayに詳しい方がいましたら、アドバイスなどお願いします。
DiectPlayでホストを作成できません
Re: DiectPlayでホストを作成できません
これだけじゃわからないでしょう。
せめてコードがないと。
あなたが他の方に同じような質問をされて、まともな回答ができると思いますか?
せめてコードがないと。
あなたが他の方に同じような質問をされて、まともな回答ができると思いますか?
oui C'est la Vie♪
Re: DiectPlayでホストを作成できません
Cielさん、お返事・ご指摘ありがとうございます。
ソースコードを掲載するのを忘れていましたので掲載します。
といっても、DiprecPlayのプログラムは、DirectPlayな魔物(http://www.geocities.co.jp/SiliconValle ... vale/1233/)にアップされているサンプルコードを使いました。
ダウンロードしたサンプルのプログラムは問題なく動くのですが、自分で作っているDirectXのプログラムに埋め込むとうまく動いてくれないです。
現在は、WindowProc関数内で、キーボードの1が押されたときにHostを作成するようにしています。
WindowProc内のソースコード
CreateAtSession関数内のコード
ソースコードを掲載するのを忘れていましたので掲載します。
といっても、DiprecPlayのプログラムは、DirectPlayな魔物(http://www.geocities.co.jp/SiliconValle ... vale/1233/)にアップされているサンプルコードを使いました。
ダウンロードしたサンプルのプログラムは問題なく動くのですが、自分で作っているDirectXのプログラムに埋め込むとうまく動いてくれないです。
現在は、WindowProc関数内で、キーボードの1が押されたときにHostを作成するようにしています。
WindowProc内のソースコード
else if(wParam == 0x31)//キーボードの1が押されたとき
{
char cHostName[64];
//ダイレクトプレイアドレスオブジェクトを作成する
if( FAILED( CreateDeviceAddressToTCPIP() ) )
{
MessageBox( hWnd, "CreateDeviceAddressToTCPIP()", "エラー", 0 );
}
else
{
MessageBox( hWnd, "CreateDeviceAddressToTCPIP()", "成功", 0 );
}
//今の時間を取得
_strtime( cHostName );
//ホストを作成する
if( FAILED( CreateAtSession( cHostName, dwHostPort ) ) )
{
MessageBox( hWnd, "CreateAtSession()", "エラー", 0 );
}
else
{
MessageBox( hWnd, "CreateAtSession()", "成功", 0 );
}
//ホストネームを取得する
GetHostName( g_pHostName );
// セッションを作成する
HRESULT CreateAtSession(const LPSTR pSesName, DWORD dwPort )
{
HRESULT hr;
DPN_APPLICATION_DESC dpnAppDesc;
WCHAR wszSession[STRMAX];
char pAppExplain[]="テスト";
//MBCSからWIDEへSessionNameを変換する
mbstowcs( wszSession, pSesName, STRMAX );
ZeroMemory( &dpnAppDesc, sizeof( DPN_APPLICATION_DESC ) );
dpnAppDesc.dwSize = sizeof( DPN_APPLICATION_DESC );
dpnAppDesc.dwFlags = DPNSESSION_MIGRATE_HOST;
dpnAppDesc.guidApplication = GuidApp;
dpnAppDesc.pwszSessionName = wszSession;
//ホストに付加データを追加する
dpnAppDesc.pvApplicationReservedData = pAppExplain;
dpnAppDesc.dwApplicationReservedDataSize = sizeof( pAppExplain );
//ポートが0以外であれば設定する
if( dwPort )
{
hr = pDeviceAddress->AddComponent( DPNA_KEY_PORT, ( void * )&dwPort, sizeof( dwPort ), DPNA_DATATYPE_DWORD );
}
//ホストを作成する
hr = g_pDP->Host( &dpnAppDesc, &pDeviceAddress, 1, NULL, NULL, NULL, DPNENUMHOSTS_OKTOQUERYFORADDRESSING );
//ホストフラグをONにする
g_bHostFlg = true;
return hr;
}
Re: DiectPlayでホストを作成できません
DirectPlay はちゃんと使ったことないので
どんな関数を使っているのかわかりませんけど…
-2146073024(DPNERR_UNINITIALIZED) は
要求されたオブジェクトが初期化されていないことを示す戻り値です。
初期化処理の確認をしてみてください。
あと、ちょっと前に DirectPlay はセキュリティの脆弱性がどうのこうので問題があるので
winsock を使ってくださいねっていう記事をみたことがあります。
そのまま使って大丈夫なのかなぁ…。
どんな関数を使っているのかわかりませんけど…
-2146073024(DPNERR_UNINITIALIZED) は
要求されたオブジェクトが初期化されていないことを示す戻り値です。
初期化処理の確認をしてみてください。
あと、ちょっと前に DirectPlay はセキュリティの脆弱性がどうのこうので問題があるので
winsock を使ってくださいねっていう記事をみたことがあります。
そのまま使って大丈夫なのかなぁ…。
Re: DiectPlayでホストを作成できません
梨樹さん、お返事ありがとうございます。
初期化処理の確認をしてみたいと思います。
DirectPlayの脆弱性のについての話は初めて知りました。
ネットワークは今回初めて使ったので、DirectPlayとWinsoc違いがいまいちまだ理解していないので、WinsockやDirectPlayの脆弱性についても調べてみます
初期化処理の確認をしてみたいと思います。
DirectPlayの脆弱性のについての話は初めて知りました。
ネットワークは今回初めて使ったので、DirectPlayとWinsoc違いがいまいちまだ理解していないので、WinsockやDirectPlayの脆弱性についても調べてみます
Re: DiectPlayでホストを作成できません
ソースコードを色々と改良しているうちに無事ホストを作成することができました。
ただ、原因がわかっていないので、何が原因だったかが気になります。
ただ、原因がわかっていないので、何が原因だったかが気になります。