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