MFCATL サンプル : MFC サーバーでの ATL COM オブジェクトの使用

更新 : 2007 年 11 月

MFCATL サンプルでは、MFC サーバー EXE で ATL COM オブジェクトを使用する方法を示します。

このサーバーでは、次の 2 つのオブジェクトを作成できます。MFC で実装され、ディスパッチ インターフェイスをサポートする ObjectOne、および ATL で実装され、デュアル インターフェイスをサポートする ObjectTwo です。

s5ky1ss3.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。

サンプルとそのインストール手順を取得するには

  • Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。

    詳細については、「サンプル ファイルの格納場所」を参照してください。

  • 使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。

  • サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。

サンプルのビルドと実行

サンプルをビルドして実行するには

  1. ソリューション ファイル mfcatl.sln を開きます。

  2. [ビルド] メニューの [ソリューションのビルド] をクリックします。

  3. [デバッグ] メニューの [デバッグなしで開始] をクリックします。mfcatl.exe サーバーがスタンドアロンで実行され、登録されます。

  4. Web ブラウザで mfcatl.htm ファイルを開き、ボタンをクリックして適切なオブジェクトを呼び出します。各オブジェクトを個別に呼び出すことも、両方を同時に呼び出すこともできます。

変換に関する注意事項

当初は、両方の MFCATL オブジェクトが MFC で実装されていました。どちらも CCmdTarget の派生オブジェクトでした。ObjectTwo は ATL を使用して、次の手順で再実装されました。

  1. ATL ヘッダー ファイル (Atlbase.h と Atlcom.h) を Premfcat.h にインクルードします。

  2. Atlimpl.cpp を Premfcat.cpp にインクルードします。

  3. BEEPER EXE サンプルと同様に、CComModule の派生クラスを Prefcat.h に追加します。この派生クラスは、Lock メソッドと Unlock メソッドを実装して、AfxOleLockAppAfxOleUnlockApp を呼び出すことによりロック カウントを MFC に転送します。

  4. オブジェクト マップ マクロのペア (BEGIN_OBJECT_MAPEND_OBJECT_MAP) を Mfcatl.cpp に追加し、_Module という名前のモジュール クラスの静的インスタンスを追加します。

  5. _Module.InitTermInitInstanceExitInstance から呼び出します。

  6. typelib をリソースとして追加します。

  7. _Module.RegisterServer(TRUE)InitInstance から呼び出します。これは、COleObjectFactory::UpdateRegistryAll への MFC 呼び出しに相当します。

  8. _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE) 呼び出します。これは、IMPLEMENT_OLECREATE マクロで暗黙に行ったように、MFC のクラス ファクトリの REGCLS_MULTIPLEUSE に相当します。

  9. 次の手順を実行して、ATL で ObjectTwo を再実装します。

    • ODL ファイルをディスパッチ インターフェイスからデュアル インターフェイスに変更します。

    • ODL コンパイルで、ATL に必要なヘッダー ファイル (Interf.h) を生成します。

    • .h ファイルと .cpp ファイルを書き直します。最も簡単な方法は、ATL ウィザードを実行して、自動的に生成されたコードを元の MFC コードにコピーして貼り付け、名前を変更する方法です。

    • OBJECT_ENTRY(CLSID_ObjectTwo, CObjectTwo) を ATL オブジェクト マップに追加します。

このサンプルにはありませんが、場合によっては、次に示す変換手順も必要です。

  • IDL 形式への ODL ファイルの移植

  • コマンド ライン引数 -RegServer-UnregServer のサポートの追加

キーワード

このサンプルでは、次のキーワードを使用します。

AfxMessageBox; AfxOleInit; AfxOleLockApp; AfxOleUnlockApp; ASSERT; BEGIN_COM_MAP; CCmdTarget; CCmdTarget::OnFinalRelease; CComCoClass; CComModule; CComModule::GetLockCount; CComModule::Lock; CComModule::Unlock; CComObjectRoot; CDialog; CMenu::AppendMenu; COleObjectFactory::RegisterAll; COleObjectFactory::UpdateRegistryAll; COM_INTERFACE_ENTRY; CString::IsEmpty; CString::LoadString; CWindow::GetSystemMenu; DECLARE_DYNCREATE; DECLARE_NOT_AGGREGATABLE; DECLARE_REGISTRY; DestroyWindow; EnableAutomation; GetClientRect; GetSystemMetrics; IDispatchImpl; PostMessage; SendMessage; SetIcon; ShowWindow; SysAllocString

参照

その他の技術情報

ATL サンプル