次の方法で共有


シリアル アドレス オブジェクトの作成

シリアル アドレス オブジェクトの作成

ここでは、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_SERIAL );

EnumHostsConnectHost の各メソッドには、OKTOQUERYFORADDRESSING フラグ (DPNENUMHOSTS_OKTOQUERYFORADDRESSING、 DPNCONNECT_OKTOQUERYFORADDRESSING、 DPNHOST_OKTOQUERYFORADDRESSING) があり、このフラグによって DirectPlay はサービス プロバイダ コンポーネントを超えるアドレスで不足している情報をユーザーに求めることができる。しかし、ほとんどのアプリケーションでは、ユーザーの使い勝手を向上させるために、これら標準のダイアログをオーバーライドすることが予想される。以下では、シリアル サービス プロバイダに使う共通のコンポーネントと必要なコンポーネントを示す。

デバイス アドレス

ローカル プレーヤのデバイス アドレスを作成し、シリアル サービス プロバイダを使う場合は、次のコンポーネントを設定する必要がある。

  • ボー レート
  • ストップ ビット
  • パリティ
  • フロー制御
  • デバイス (設定により異なる)

設定できるその他のデータの一覧については、「データ値の概要」を参照すること。

ボー レート

次のサンプル コードは、IDirectPlay8Address::AddComponent メソッドを使ってボー レートを設定する方法を示している。

DWORD dwBaudRate;
//  Set dwBaudRate

hr = g_pHostAddress->AddComponent( DPNA_KEY_BAUD,                   //pwszName
                                 &dwBaudRate, sizeof(dwBaudRate),   //lpvData, dwDataSize
                                 DPNA_DATATYPE_DWORD );             //dwDataType

この例では、dwBaudRate 変数に、dpaddr.h で定義された任意の DPNA_BAUD_RATE 定数を含めることができる。

ストップ ビット

次のサンプル コードは、IDirectPlay8Address::AddComponent メソッドを使ってストップ ビットを設定する方法を示している。

size_t cb;
hr = StringCbLengthW(DPNA_STOP_BITS_ONE, MAX_PATH, &cb);

hr = g_pHostAddress->AddComponent( DPNA_KEY_STOPBITS,                  //pwszName
                                 DPNA_STOP_BITS_ONE,                   //lpvData
                                 cb,                                   //dwDataSize, in bytes
                                 DPNA_DATATYPE_STRING );               //dwDataType

この例では、dpaddr.h で定義された DPNA_STOP_BITS_ONE 定数の使用によって示されるように、ストップ ビット設定は 1 となる。

パリティ

次のサンプル コードは、IDirectPlay8Address::AddComponent メソッドを使ってパリティを設定する方法を示している。

size_t cb;
hr = StringCbLengh(DPNA_PARITY_NONE, MAX_PATH, &cb);

hr = g_pHostAddress->AddComponent(DPNA_KEY_PARITY,                   //pwszName
                                 DPNA_PARITY_NONE,                   //lpvData
                                 cb,                                 //dwDataSize, in bytes
                                 DPNA_DATATYPE_STRING );             //dwDataType

この例では、dpaddr.h で定義された DPNA_PARITY_NONE 定数の使用で示されるように、パリティ設定はない。

フロー制御

次のサンプル コードは、IDirectPlay8Address::AddComponent メソッドを使ってフロー制御を設定する方法を示している。

size_t cb;
hr = StringCbLengh(DPNA_FLOW_CONTROL_RTSDTR, MAX_PATH, &cb);

hr = g_pHostAddress->AddComponent(DPNA_KEY_FLOWCONTROL,                    //pwszName
                                 DPNA_FLOW_CONTROL_RTSDTR,                 //lpvData
                                 cb,                                       //dwDataSize, in bytes
                                 DPNA_DATATYPE_STRING );                   //dwDataType

この例では、dpaddr.h で定義された 定数の使用で示されるように、DPNA_FLOW_CONTROL_RTSDTR フロー制御は RTS/DTR に設定される。

デバイス

各 OKTOQUERYFORADDRESSING フラグを EnumHostsConnect、または Host に渡さない場合、デバイスの設定が必要になることがある。

利用可能なデバイスの一覧を取得するには、EnumServiceProviders メソッドを使う。次のサンプル コードは、pguidServiceProvider パラメータに CLSID_DP8SP_SERIAL を設定して EnumServiceProviders メソッドを呼び出し、利用可能なシリアル デバイスの一覧を取得する方法を示している。

DWORD dwSize;
DWORD dwItems;
PDPN_SERVICE_PROVIDER_INFO pSPInfoBuffer;

hr = g_pDP->EnumServiceProviders(&CLSID_DP8SP_SERIAL,       //pguidServiceProvider
                                 NULL, pSPInfoBuffer,       //pguidApplication, pSPInfoBuffer
                                 &dwSize, &dwItems, 0 );    //pcbEnumData, pcReturned, dwFlags

pSPInfoBuffer パラメータはバッファのアドレスであり、呼び出しが成功した場合、DirectPlay はサービス プロバイダのデバイス情報を配置する。通常、EnumServiceProviders は 2 回呼び出される。 1 回は必要なバッファ サイズを取得するため、もう 1 回はバッファに実際にデータを格納するためである。

利用可能なデバイスを列挙したら、次に示すように IDirectPlay8Address::AddComponent メソッドを使ってシリアル デバイスを選択する。

GUID pGuid;
//  Set pGuid

hr = g_pDeviceAddress->AddComponent( DPNA_KEY_DEVICE,        //pwszName
                                    pGuid, sizeof(GUID),     //lpvData, dwDataSize
                                    DPNA_DATATYPE_GUID);     //dwDataType

この例では、pGuid は選択されたシリアル デバイスを表すグローバル一意識別子 (GUID) のアドレスである。

ホスト アドレス

シリアル ホストのアドレスには、シリアル プロバイダ コンポーネントを超える追加情報を含める必要はない。