INPROC サンプル : インプロセス オートメーション サーバー アプリケーションの例
更新 : 2007 年 11 月
INPROC サンプルは、インプロセス オートメーション (以前の OLE オートメーション) サーバーです。ほかの MFC オートメーション サーバー サンプルとは異なり、INPROC はクライアントのアドレス空間にダイナミック リンク ライブラリ (DLL: Dynamic Link Library) として読み込むことができます。通常、インプロセス サーバーは個別の EXE として実装されたサーバーよりも効率的です。これは、サーバーによって実装されたオブジェクトに対するメソッドを呼び出すリモート プロシージャ コール (RPC: Remote Procedure Call) が不要なためです。
メモ : |
---|
このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。 |
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
INPROC サンプルをビルドおよび実行するには
ソリューション ファイル inproc.sln を開きます。
[ビルド] メニューの [ビルド] をクリックします。
プロジェクトの .reg ファイルを使用して INPROC の DLL を登録します。つまり、regedit INPROC.REG を実行するか、または REGSVR サンプルの REGSVR を使用します。
REGEDIT を使用する場合は、Inproc.dll がシステム パスにあることを確認してください。または、Inproc.dll のパスを明示的に参照するように .reg ファイルを変更できます。
DLL はスタンドアロンで実行できませんが、EXE は可能です。したがって、INPROC をテストするには、クライアント アプリケーションで "呼び出す" 必要があります。INPROC は Visual Basic または Visual C++ から呼び出すことができます。Visual C++ で INPROC を呼び出す例については、IPDRIVE サンプルに関するトピックを参照してください。
メモ : INPROC は EXE または DLL としてビルドできます。サンプルのプロジェクト設定で EXE バリアントを設定してください。EXE バージョンの INPROC は Windows レジストリにしか登録できません。
INPROC のクラス
CVariantMap クラスでは、VARIANT から VARIANT へのマップが実装されます。これにより、任意の VARIANT をほかの任意の VARIANT に変換できます。このクラスは、CMap を直接使用する可能性が高い Visual C++ プログラマにはそれほど役立たないかもませんが、MFC のコレクション クラスの充実した機能を Visual Basic ユーザーにもたらします。CVariantMap クラスは、mfc.inproc.varmap という名前でアクセスされます。これはオブジェクトが Windows レジストリに登録される方法です。CVariantMap では、標準コレクションのメソッドとプロパティ、および _NewEnum メソッドが実装されます。
CStringCollect クラスでは、文字列の配列が実装されます。この実装は CVariantMap クラスよりも単純ですが、これにより CVariantMap と同じオートメーション機能の多くが実装されます。CStringCollect オブジェクトは、mfc.inproc.strcoll という名前でアクセスされます。これは、標準コレクションのメソッドとプロパティのほとんどを実装し、独自のコレクションを実装する方法の例として適しています。特に重要なのは _NewEnum メソッドの実装です。この実装により、Visual Basic ユーザーが、コレクションの内容を列挙するときに For Each... In 構文を使用できるようになります。CStringCollect では CEnumVariant を使用してこの機能を実装します。また、MFC のインターフェイス マップを使用して IEnumVARIANT を実装します。CEnumVariant はユーザーのアプリケーションで役立ちます。
最後に、このサンプルでは、インプロセス サーバーと LocalServer サーバーのパフォーマンスを簡単に比較するために使用するいくつかのダミー プロパティが実装されます。これらは、IPDRIVE の [Test1] ボタンと [Test2] ボタンでテストされるプロパティです。
キーワード
このサンプルでは、次のキーワードを使用します。
AfxIsValidAddress; AfxMessageBox; AfxOleInit; AfxOleLockApp; AfxOleUnlockApp; AfxThrowMemoryException; AfxThrowOleException; CCmdTarget::EnableAutomation; CCmdTarget::GetIDispatch; CCmdTarget::OnFinalRelease; CString::AllocSysString; CWinApp::InitInstance; CWinApp::RunAutomated; CWinApp::RunEmbedded; DllCanUnloadNow; DllGetClassObject; min