次の方法で共有


C++ マネージ拡張でのクライアント

C++ マネージ拡張でクライアントがどのように記述されるかを次に示します。

リスト 1. C++ マネージ拡張でのクライアント (ClientVC.cpp)

#using <mscorlib.dll>
using namespace System;

#using "..\Bin\CompCS.dll"
#using "..\Bin\CompVC.dll"
#using "..\Bin\CompVB.dll"

// The method, main, is the application's entry point.
void main() {

   // Iterate through the component's strings,
   // and write them to the console.
   CompCS::StringComponent* myCSStringComp = 
      new CompCS::StringComponent();
   Console::WriteLine  
      (L"Strings from C# StringComponent");
   for (int index = 0; index < myCSStringComp->Count; 
      index++) {
      Console::WriteLine(myCSStringComp-> 
         GetString(index));
   }

   // Iterate through the component's strings,
   // and write them to the console.
   CompVC::StringComponent* myVCStringComp = 
      new CompVC::StringComponent();
   Console::WriteLine 
     (L"\nStrings from Visual C++ StringComponent");
   for (int index = 0; index < myVCStringComp->Count; 
      index++) {
      Console::WriteLine(myVCStringComp-> 
   GetString(index));
   }

   // Iterate through the component's strings,
   // and write them to the console.
   CompVB::StringComponent* myVBStringComp = 
      new CompVB::StringComponent();
   Console::WriteLine(L"\nStrings from Visual Basic 
      StringComponent");
   for (int index = 0; index < myVBStringComp->Count; 
      index++) {
      Console::WriteLine(myVBStringComp-> 
   GetString(index));
   }
}

ここで、まず注目する必要があるのは、適切な ..\Bin サブディレクトリに格納されている 3 つのコンポーネントをそれぞれインポートしていることです。

#using "..\Bin\CompCS.dll"
#using "..\Bin\CompVC.dll"
#using "..\Bin\CompVB.dll"

3 つの文字列コンポーネントを呼び出すクライアント コードの各セクションは、使用するライブラリの指定を除けば、すべて同じです。3 つの各セクションの最初のステートメントは、型 StringComponent (コンポーネントで定義される) の新しいローカル変数を宣言し、宣言した変数を初期化し、そのコンストラクタを呼び出しています。

CompCS::StringComponent* myCSStringComp = 
new CompCS::StringComponent();

クライアントは、文字列をコンソールに書き込み、プログラムのこの部分が入力済みであることを示した後に、Count プロパティの値を使用して適切な文字列コンポーネントのメンバを反復処理します。

for (int index = 0; index < myCSStringComp->Count; 
    index++) {
    Console::WriteLine(myCSStringComp-> 
 GetString(index));
}

以上で必要な処理はすべて完了し、他の 2 つの言語コンポーネントに対しても同じことが繰り返されます。

**メモ   **個別の GetString メソッドではなく、インデクサを使用する場合は、通常は myCSStringComp[index] 呼び出し元コードを使用します。

新しい C++ マネージ拡張クライアントのビルドは非常に簡単です。

cl.exe /clr /Zi /c ClientVC.cpp
link.exe /debug /nod:libcpmt.lib 
    kernel32.lib mscoree.lib 
    /out:..\bin\ClientVC.exe ClientVC.obj

前述の C++ マネージ拡張の例と同様に、共通言語ランタイムのマネージ コードを作成するようにコンパイラに指示するには /clr スイッチが必要です。生成されたプログラムを実行すると、次の出力が生成されます。

C:\...\CompTest\Bin>clientvc
Strings from C# StringComponent
C# String 0
C# String 1
C# String 2
C# String 3

Strings from Visual C++ StringComponent
Visual C++ String 0
Visual C++ String 1
Visual C++ String 2
Visual C++ String 3

Strings from Visual Basic StringComponent
Visual Basic String 0
Visual Basic String 1
Visual Basic String 2
Visual Basic String 3

参照

Visual C# でのクライアント | Visual Basic でのクライアント | Windows フォームを使用する Windows クライアント | ASP.NET を使用するクライアント | 開発チュートリアルのまとめ | 付録 A: 名前空間を検索するためのツール