Platform SDK: DirectX |
ここでは、C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectPlay Visual Basic チュートリアル」を参照すること。
手動接続を作成するための次のステップは、アプリケーションに対する通信媒体を選択するようにユーザーに要求することである。アプリケーションでは、EnumConnections メソッドを使用して、パーソナル コンピュータにインストールされているサービス プロバイダを識別することができる。
次の例は、サービス プロバイダを列挙する方法を示している。
// DirectPlay 接続をすべて列挙し // それらをリストボックスに格納する。 if ( FAILED( hr = pDP->EnumConnections( &g_AppGUID, DPConnect_EnumConnectionsCallback, hWndListBox, 0 ) ) ) { SAFE_RELEASE( pDP ); return hr; }
EnumConnections メソッドの 2 番目のパラメータは、DirectPlay によって登録されたサービス プロバイダを列挙するコールバックである。次の例は、SimpleConnect サンプル におけるこのコールバック関数の実装方法を示している。
BOOL FAR PASCAL DPConnect_EnumConnectionsCallback( LPCGUID pguidSP, VOID* pConnection, DWORD dwConnectionSize, LPCDPNAME pName, DWORD dwFlags, VOID* pvContext ) { HRESULT hr; LPDIRECTPLAY4 pDP = NULL; VOID* pConnectionBuffer = NULL; HWND hWndListBox = (HWND)pvContext; LRESULT iIndex; // IDirectPlay オブジェクトを作成する。 if ( FAILED( hr = CoCreateInstance( CLSID_DirectPlay, NULL, CLSCTX_ALL, IID_IDirectPlay4A, (VOID**)&pDP ) ) ) return FALSE; // エラー。列挙を中止する。 // 初期化を試みて、接続が利用できるかどうか // テストする。 // 接続。 if( FAILED( hr = pDP->InitializeConnection( pConnection, 0 ) ) ) { SAFE_RELEASE( pDP ); return TRUE; // 利用できない接続。列挙を続ける。 } // IDirectPlay インターフェイスはこれ以上必要ないので、解放する。 SAFE_RELEASE( pDP ); // 適切な接続が見つかったので、これをリストボックスに代入する。 iIndex = SendMessage( hWndListBox, LB_ADDSTRING, 0, (LPARAM)pName->lpszShortNameA ); if( iIndex == CB_ERR ) return FALSE; // エラー。列挙を中止する。 pConnectionBuffer = new BYTE[ dwConnectionSize ]; if( pConnectionBuffer == NULL ) return FALSE; // エラー。列挙を中止する。 // GUID へのポインタをリストボックスに格納する。 memcpy( pConnectionBuffer, pConnection, dwConnectionSize ); SendMessage( hWndListBox, LB_SETITEMDATA, iIndex, (LPARAM)pConnectionBuffer ); return TRUE; // 列挙を続ける。 }
ユーザーが使用する接続を選択したら、列挙によって返される接続データを取得し、そのデータを使って DirectPlay オブジェクトを初期化する必要がある。
if ( FAILED( hr = g_pDP->InitializeConnection( pConnection, 0 ) ) ) return hr;
次項 : ステップ 3 : セッションへの参加