QStat サンプル : ビジネス ロジックを公開するための COM オブジェクトのラップ
更新 : 2007 年 11 月
QStat サンプルでは、COM オブジェクトへのアクセスをラップし、C++ を使用して .NET Framework クライアントに機能を公開する DLL の作成方法を示します。
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
サンプルをビルドするには
Visual Studio IDE で、QStat.sln ソリューション ファイルを読み込みます。
ソリューション エクスプローラで、[QStat] ソリューションを右クリックします。
ショートカット メニューの [ソリューションのビルド] をクリックします。
サンプルを実行するには
ソリューション エクスプローラで、[netClient] プロジェクトを右クリックします。
[デバッグ] メニューの [開始] をクリックします。
クライアントが開始されると、ビジネス ロジックの呼び出しが行われていることを通知する一連のメッセージがコンソールに出力されます。
メモ : |
---|
コンポーネント間の対話をより詳しく理解するには、ブレークポイントを設定するか、[デバッグ] メニューの [ステップ イン] または [ステップ オーバー] を使用して、コードを 1 ステップずつ実行します。 |
プロジェクトの説明
このサンプルでは、ビジネス ロジック自体の実装ではなく、COM クライアントおよび .NET Framework クライアントのビジネス ロジックへのアクセスに重点が置かれています。そのため、このサンプルに示されたビジネス ロジックは、比較的簡単なものです。実際に、このサンプルのビジネス ロジックは簡単な算術演算 (相乗平均、調和平均、二次平均の計算) を行い、結果をクライアントに返します。
プログラミングでは、ビジネス ロジックと、該当するビジネス ロジック (この例では COM) を公開するための構造を区別することをお勧めします。ただし、このサンプルでは、使用する COM オブジェクト内にビジネス ロジックが直接実装され、COM オブジェクトを通じてアクセスする以外には、基になるビジネス ロジックにアクセスできないと仮定しています。
このサンプルでは、#import を通じて COM オブジェクトを使用するラッパー DLL を作成して、.NET Framework クライアントによって使用される .NET Framework クラスを公開しています。これは、#import を通じて入手した COM スマート ポインタのデータ メンバが含まれたネイティブ C++ クラス nativeMeanCalc を定義して行われます。定義された .NET Framework クラスには、ネイティブ C++ クラスへのポインタがあります。.NET Framework クラス netMeanCalc には、nativeMeanCalc オブジェクトへのポインタが含まれており、このポインタによって目的の COM オブジェクトへの経路が完成します。netMeanCalc は、.NET Framework クライアントによって使用されるパブリック クラスです。
以下の 2 つのクライアント プロジェクトがあります。
nativeClient は、ネイティブ C++ で実装された COM クライアントです。
netClient は、C++ の新しい構文を使用して作成されています。
クラスとキーワード
このサンプルでは、次のキーワードを使用します。
__gc; #using; #import; try; catch; _com_error; Console::WriteLine