次の方法で共有


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

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

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

  • CoCreateInstance を呼び出して、ロビー クライアント オブジェクト (CLSID_DirectPlay8LobbyClient) を作成する。riid パラメータを使って、IDirectPlay8LobbyClient インターフェイス (IID_IDirectPlay8LobbyClient) を要求する。
  • ロビー クライアントの IDirectPlay8LobbyClient::Initialize メソッドを呼び出す。ロビー クライアントのコールバック メッセージ ハンドラへのポインタを、メソッドに渡す。
  • IDirectPlay8LobbyClient::EnumLocalPrograms メソッドを使って、ユーザーのシステムにあるロビー可能なアプリケーションを列挙する。

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

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

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

// g_pLobbyClient is a pointer to an IDirectPlay8LobbyClient interface
// Start with a NULL data buffer.The required buffer size is
// returned through dwSize.
  hr = g_pLobbyClient->EnumLocalPrograms( NULL, pData, &dwSize, &dwPrograms, 0 );
 if( dwSize == 0 )
  {
// No registered applications.
  }
// Set the data buffer to the appropriate size
  pData = new BYTE[dwSize];
  hr = g_pLobbyClient->EnumLocalPrograms( NULL, pData, &dwSize, &dwPrograms, 0 )

// Cast the returned data to the appropriate structure type
  DPL_APPLICATION_INFO* pAppInfo = (DPL_APPLICATION_INFO*) pData;

// Enumerate the names of the registered applications
  for( iProgram=0; iProgram<dwPrograms; iProgram++ )
  {
    TCHAR strAppName[MAX_PATH];
    DXUtil_ConvertWideStringToGeneric( strAppName, pAppInfo->pwszApplicationName, MAX_PATH );
  }
  SAFE_DELETE_ARRAY( pData );
  return S_OK;
}