Microsoft DirectX 8.0 (C++)

ロビー クライアントの初期化

ロビー クライアントは、ロビー サーバーが起動するか、ユーザーが直接起動する。ロビー クライアントは、起動しても、初期化されるまでアプリケーションを起動できない。初期化には、以下の作業が必要になる。

前の 2 つのステップで、ロビー クライアント オブジェクトを作成し、そのオブジェクトとロビー クライアントの間に通信リンクを設定する。最後のステップで、ユーザーのシステムで利用できるロビー可能なアプリケーションを判断する。この情報は、選択されたアプリケーションを起動するために必要である。

次のサンプル コードは、ローカル アプリケーションの列挙方法を示している。これは、SDK のサンプル LobbyClient にある EnumRegisteredApplications 関数を簡略化したものである。わかりやすくするため、エラー処理およびダイアログ ボックス関連のコードが削除されている。完全なコードについては、SDK のサンプル LobbyClient を参照すること。

HRESULT EnumRegisteredApplications()
{
    HRESULT hr;
    DWORD   dwSize     = 0;
    DWORD   dwPrograms = 0;
    DWORD   iProgram;
    BYTE*   pData   = NULL;

//g_pLobbyClient は、IDirectPlay8LobbyClient インターフェイスへのポインタ。
//最初は NULL データ バッファ。必要なバッファ サイズは
//dwSize.で返される。
  hr = g_pLobbyClient->EnumLocalPrograms( NULL, pData, &dwSize, &dwPrograms, 0 );

  if( dwSize == 0 )
  {
//登録済みアプリケーションはない。
  }
//データ バッファを適切なサイズに設定する。
  pData = new BYTE[dwSize];
  hr = g_pLobbyClient->EnumLocalPrograms( NULL, pData, &dwSize, &dwPrograms, 0 )

//返されたデータを適切な構造体型にキャストする。
  DPL_APPLICATION_INFO* pAppInfo = (DPL_APPLICATION_INFO*) pData;

//登録済みアプリケーションの名前を列挙する。
  for( iProgram=0; iProgram<dwPrograms; iProgram++ )
  {
    TCHAR strAppName[MAX_PATH];
    DXUtil_ConvertWideStringToGeneric( strAppName, pAppInfo->pwszApplicationName );

  }
  SAFE_DELETE_ARRAY( pData );
  return S_OK;
}

登録済みアプリケーションのアプリケーション GUID は、アプリケーションの起動に必要なので、保存しなければならない。

ロビー クライアントの設計によっては、以下の作業のいくつかを実行する必要がある。