DiectPlayでホストを作成できません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kon

DiectPlayでホストを作成できません

#1

投稿記事 by kon » 9年前

現在DirectPlayでネットワーク通信をするプログラムを作成中ですが、ホスト(Host)の作成で失敗します。

Host関数の戻り値は、-2146073024が戻り値として返ってきています。

DirectPlayに詳しい方がいましたら、アドバイスなどお願いします。

kon

Re: DiectPlayでホストを作成できません

#2

投稿記事 by kon » 9年前

補足:
Host関数とはdplay8.hで定義されている関数のことです。

アバター
Ciel
記事: 252
登録日時: 9年前

Re: DiectPlayでホストを作成できません

#3

投稿記事 by Ciel » 9年前

これだけじゃわからないでしょう。
せめてコードがないと。
あなたが他の方に同じような質問をされて、まともな回答ができると思いますか?
oui C'est la Vie♪

kon

Re: DiectPlayでホストを作成できません

#4

投稿記事 by kon » 9年前

Cielさん、お返事・ご指摘ありがとうございます。

ソースコードを掲載するのを忘れていましたので掲載します。

といっても、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 );
 
CreateAtSession関数内のコード

コード:


//	セッションを作成する
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;
}
 

アバター
lriki
記事: 88
登録日時: 9年前

Re: DiectPlayでホストを作成できません

#5

投稿記事 by lriki » 9年前

DirectPlay はちゃんと使ったことないので
どんな関数を使っているのかわかりませんけど…

-2146073024(DPNERR_UNINITIALIZED) は
要求されたオブジェクトが初期化されていないことを示す戻り値です。
初期化処理の確認をしてみてください。


あと、ちょっと前に DirectPlay はセキュリティの脆弱性がどうのこうので問題があるので
winsock を使ってくださいねっていう記事をみたことがあります。

そのまま使って大丈夫なのかなぁ…。

kon

Re: DiectPlayでホストを作成できません

#6

投稿記事 by kon » 9年前

梨樹さん、お返事ありがとうございます。

初期化処理の確認をしてみたいと思います。

DirectPlayの脆弱性のについての話は初めて知りました。

ネットワークは今回初めて使ったので、DirectPlayとWinsoc違いがいまいちまだ理解していないので、WinsockやDirectPlayの脆弱性についても調べてみます

kon

Re: DiectPlayでホストを作成できません

#7

投稿記事 by kon » 9年前

ソースコードを色々と改良しているうちに無事ホストを作成することができました。

ただ、原因がわかっていないので、何が原因だったかが気になります。

閉鎖

“C言語何でも質問掲示板” へ戻る