モデム アドレス オブジェクトの作成
モデム アドレス オブジェクトの作成
ここでは、IDirectPlay8Address メソッドを使って、モデム サービス プロバイダ用の典型的なアドレス オブジェクトを作成する方法について説明する。
アドレス オブジェクトを作成するための最初の手順は、CoCreateInstance を呼び出して IDirectPlay8Address オブジェクトを作成することである。このパラメータには、アドレス オブジェクトのクラス識別子 (CLSID_DirectPlay8Address)、インターフェイスの識別子 (IID_IDirectPlay8Address)、IDirectPlay8Address インターフェイスへのポインタのアドレスが含まれる。次のサンプル コードは、アドレス オブジェクトを作成する方法を示している。
IDirectPlay8Address* g_pDeviceAddress;
.
.
.
hr = CoCreateInstance( CLSID_DirectPlay8Address, NULL,
CLSCTX_INPROC_SERVER,
IID_IDirectPlay8Address,
(LPVOID*) &g_pDeviceAddress );
CoCreateInstance の使い方については、「COM オブジェクトの作成」を参照すること。
アドレス オブジェクトの作成後は、少なくともサービス プロバイダのコンポーネントを設定する必要がある。そのためには、IDirectPlay8Address::SetSP を呼び出す。次のサンプル コードは、サービス プロバイダに Microsoft® DirectPlay® モデム サービス プロバイダを設定する方法を示している。
hr = g_pDeviceAddress->SetSP(&CLSID_DP8SP_MODEM );
EnumHosts、Connect、Host の各メソッドには、OKTOQUERYFORADDRESSING フラグ (DPNENUMHOSTS_OKTOQUERYFORADDRESSING、 DPNCONNECT_OKTOQUERYFORADDRESSING、 DPNHOST_OKTOQUERYFORADDRESSING) があり、このフラグによって DirectPlay はサービス プロバイダ コンポーネントを超えるアドレスで不足している情報をユーザーに求めることができる。しかし、ほとんどのアプリケーションでは、ユーザーの使い勝手を向上させるために、これら標準のダイアログをオーバーライドすることが予想される。以下では、モデム サービス プロバイダに使う共通のコンポーネントと必要なコンポーネントを示す。
デバイス アドレス
ローカル プレーヤのデバイス アドレスを作成し、モデム サービス プロバイダを使う場合は、デバイスの設定も必要になることが考えられる。設定できるその他のデータの一覧については、「データ値の概要」を参照すること。各 OKTOQUERYFORADDRESSING フラグを EnumHosts、Connect、または Host に渡さない場合は、デバイス アドレスに対してデバイスを指定する必要がある。
利用可能なデバイスの一覧を取得するには、EnumServiceProviders メソッドを使う。次のサンプル コードは、pguidServiceProvider パラメータに CLSID_DP8SP_MODEM を設定して EnumServiceProviders メソッドを呼び出し、利用可能なモデム デバイスの一覧を取得する方法を示している。
DWORD dwSize;
DWORD dwItems;
PDPN_SERVICE_PROVIDER_INFO pSPInfoBuffer;
hr = g_pDP->EnumServiceProviders(&CLSID_DP8SP_MODEM, //pguidServiceProvider
NULL, pSPInfoBuffer, //pguidApplication, pSPInfoBuffer
&dwSize, &dwItems, 0 ); //pcbEnumData, pcReturned, dwFlags
pSPInfoBuffer パラメータはバッファのアドレスであり、呼び出しが成功した場合、DirectPlay はサービス プロバイダのデバイス情報を配置する。通常、EnumServiceProviders は 2 回呼び出される。 1 回は必要なバッファ サイズを取得するため、もう 1 回はバッファに実際にデータを格納するためである。
利用可能なデバイスを列挙したら、次に示すように IDirectPlay8Address::AddComponent メソッドを使ってモデム デバイスを選択する。
GUID pGuid;
// Set pGuid to the GUID of the modem device.
hr = g_pDeviceAddress->AddComponent( DPNA_KEY_DEVICE, //pwszName
pGuid, sizeof(GUID), //lpvData, dwDataSize
DPNA_DATATYPE_GUID); //dwDataType
この例では、pGuid は選択されたモデム デバイスを表すグローバル一意識別子 (GUID) のアドレスである。
ホスト アドレス
ホスト アドレスを作成し、モデム サービス プロバイダを使う場合は、電話番号の設定が必要なこともある。設定できるその他のデータの一覧については、「データ値の概要」を参照すること。各 OKTOQUERYFORADDRESSING フラグを EnumHosts または Connect に渡さない場合は、ホスト アドレスに対して電話番号を指定する必要がある。
次のサンプル コードは、IDirectPlay8Address::AddComponent メソッドを使って、ホスト アドレスの電話番号を設定する方法を示している。
size_t cb;
WCHAR wstrPhone[MAX_PATH];
// Set wstrPhone to the phone number of the host address
hr = StringCbLengthW(wstrPhone, MAX_PATH, &cb);
hr = pHostAddress->AddComponent( DPNA_KEY_PHONENUMBER, //pwszName
wstrPhone, //lpvData
cb, //dwDataSize in bytes
DPNA_DATATYPE_STRING ); //dwDataType
この例では、wstrPhone に、接続先となるホストの電話番号が含まれる。
アドレス オブジェクトの作成後は、Connect メソッドの pDeviceInfo パラメータにデバイス パラメータを渡し、pHostAddr パラメータにホスト アドレスを渡して、セッションに接続する。