Share via


ATLTangram 属性サンプル : ATL、MFC、および COM を使用する大規模なプロジェクトの管理例

更新 : 2007 年 11 月

ATLTangram は、Tangram サンプルを移植したものです。Tangram サンプルは、『Inside COM』(Dale Rogerson 著、アスキー出版局)の「第 13 章 COM のサンプルプログラム」で紹介されています (https://www.microsoft.com/japan/info/press。Dale 氏の努力に敬意を表すると共に、ATL サンプルでのコードの使用を許可していただいたことに深く感謝します。このサンプルを使用すると、レガシ COM アプリケーションから、インフラストラクチャに ATL を使用するアプリケーションへの変換が簡単に実行できます。

ATLTangram は ATLTangram ソリューションで構成される大規模なプロジェクトです。このプロジェクトは、MFCTangram、ATLModel、ATLGdiWorld、ATLGLWorld、ATLModelExe、および ATLTangramCanvas の 6 つのサブプロジェクトを制御します。このサンプルでは、統合開発環境 (IDE: Integrated Development Environment) の機能と COM のさまざまな概念を示します。また、MFC を ATL COM サーバーのクライアントとして使用する例も示します。

16k4aex6.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. ソリューション ファイル atltangram.sln を開きます。

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

  3. [デバッグ] メニューの [デバッグなしで開始] をクリックします。

  4. ダイアログ ボックスが表示されます。各オプションを選択してください。Tangram プログラムが開始されます。

大規模なプロジェクトの管理

ソリューションでは、IDE での依存関係が確立されています。これらの依存関係は、サンプルの既定のディレクトリ構造で機能し、パスに関連しています。

依存関係の階層は、次のとおりです。

MFCTangram
   ATLGLWorld
      ATLGdiWorld
         ATLTangramCanvas
            ATLModel
   ATLModelExe
      ATLModel
      ATLModel

このサンプルのプロジェクト設定は、すべて完了しています。次の手順に従ってプロジェクトの依存関係をチェックします。

  1. [プロジェクト] メニューの [プロパティ] をクリックします。

  2. ソリューション エクスプローラで Atltangram ソリューションを選択します。

  3. [プロパティ ページ] ダイアログ ボックスで、[共通プロパティ] フォルダを展開し、[デバッグ ソース ファイル] を選択します。[以下のパスからソース ファイルを検索する] ボックスをチェックします。

  4. [プロジェクト依存関係] をクリックし、依存プロジェクト名をチェックします。

ATLModel プロジェクトと ATLModelExe プロジェクトでは COM サーバーの設定方法を示しているため、同じファイルのセットと 2 つのプロジェクト ファイルを使用して、インプロセス サーバーまたはローカル サーバーとして COM サーバーをビルドできます。2 つのプロジェクト ファイルを使用すると、DLL と EXE の両方に依存関係を持たせることができます。

COM/ATL 機能

このサンプルは、複数の COM サーバーと、サーバーを使用する MFC アプリケーションで構成された COM システムです。このサンプルでは、コネクション ポイントを通じたモジュール間通信、およびローカル サーバーとインプロセス サーバーの例を示します。

その他の機能の例

  • ATL Server では、コレクションに対して標準テンプレート ライブラリを使用します。

  • MFC ドライバは、MFC テンプレート クラスを使用します。

  • 非ドキュメント/ビュー アプリケーションの例である MFC ドライバでは、CFrameWnd の派生クラスを Tangram の描画のための出力ウィンドウとして使用します。

属性

このサンプルでは次の属性を使用します。

  • ATLTANGRAM   export、helpstring、object、pointer_default、uuid

  • ATLTANGRAM/atlgdiworld   coclass、com_interface_entry、default、dll、event_receiver、helpstring、iid_is、implements_category、in、module、name、object、out、pointer_default、progid、registration_script、size_is、unique、uuid、version、vi_progid

  • ATLTANGRAM/atlglworld   coclass、com_interface_entry、default、dll、event_receiver、helpstring、implements_category、in、module、name、object、out、pointer_default、progid、registration_script、uuid、vi_progid

  • ATLTANGRAM/atlmodel   coclass、default、dll、event_source、exe、helpstring、in、module、name、object、out、pointer_default、progid、size_is、uuid

  • ATLTANGRAM/atltangramcanvas   coclass、default、dll、helpstring、in、module、name、object、out、pointer_default、progid、registration_script、uuid, vi_progid

クラスとキーワード

このサンプルでは、次の ATL クラスを使用します。

CComObjectRootEx、CComCoClass、CComControl、IDispatchImpl、IProvideClassInfo2Impl、IPersistStreamInitImpl、IPersistStorageImpl、IPersistPropertyBagImpl、IPerPropertyBrowsingImpl、IQuickActivateImpl、IObjectSafetyImpl、IOleControlImpl、IOleObjectImpl、IOleInPlaceActiveObjectImpl、IViewObjectExImpl、IOleInPlaceObjectWindowlessImpl、IDataObjectImpl、ISupportErrorInfo、ISpecifyPropertyPagesImpl、IConnectionPointContainerImpl、IPropertyNotifySinkCP、CDialogImpl

このサンプルでは、次の MFC クラスを使用します。

CFrameWnd、CTypedPtrList<>、CDialog、CWinApp、およびサポートされているその他のクラス

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

_ASSERTE; AddRef; AddUpdateRect; Advise; assert; ASSERT; ATLTRACE; auxSolidSphere; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MESSAGE_MAP; BEGIN_OBJECT_MAP; BitBlt; CATEGORYINFO; CComCoClass; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRootEx; CExeModule::Init; CExeModule::RegisterClassObjects; CExeModule::RegisterServer; CExeModule::RevokeClassObjects; CExeModule::UnregisterServer; CExeModule::UpdateRegistryFromResource; CFrameWnd::AssertValid; CFrameWnd::Dump; CFrameWnd::PreCreateWindow; ChoosePixelFormat; CModelList; CoCreateInstance; CoInitializeEx; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_AGGREGATE; COM_INTERFACE_ENTRY_IMPL; CONNECTION_POINT_ENTRY; CopyRect; CoTaskMemFree; CProxyIATLTangramModelEvent; CreateCompatibleDC; CreatePalette; CWnd::CreateEx; DECLARE_GET_CONTROLLING_UNKNOWN; DECLARE_MESSAGE_MAP; DECLARE_ONLY_AGGREGATABLE; DECLARE_REGISTRY_RESOURCEID; DeleteObject; DescribePixelFormat; DisableThreadLibraryCalls; DispatchMessage; DoButtonDown; DoModal; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MESSAGE_MAP; END_OBJECT_MAP; EqualRect; ErrorMessage; GdiFlush; GetBoundingRect; GetClientRect; GetCommandLine; GetControllingUnknown; GetDC; GetMessage; GetModuleFileName; GetObject; GetPalette; GetPaletteEntries; GetPixelFormat; GetRotation; GetVertices; glBegin; glClearColor; GLdouble CoCreateInstance; glEnable; glEnd; glFlush; glGetIntegerv; glInitNames; glLightfv; glLightModelfv; glLoadIdentity; glMatrixMode; glNormal3d; glPolygonMode; glPopMatrix; glPopName; glPushMatrix; glPushName; GLRender; glRenderMode; GLResize; glRotated; glSelectBuffer; GLSetup; glTranslated; glTranslatef; gluPerspective; gluPickMatrix; gluUnProject; glVertex2d; glVertex3d; glViewport; HPALETTE; ICatInformation::EnumClassesOfCategories; ICatRegister::QueryInterface; ICatRegister::RegisterCategories; ICatRegister::RegisterClassImplCategories; ICatRegister::UnRegisterCategories; ICatRegister::UnRegisterClassImplCategories; IConnectionPointContainer::FindConnectionPoint; IConnectionPointContainer::Release; IConnectionPointContainerImpl; InitInstance; InvalidateRect; IsCurrent; IsValidAddress; IUnknown::Release; LoadIcon; LoadStandardCursor; LocalFree; MakeCurrent; OBJECT_ENTRY; ON_COMMAND; ON_WM_DESTROY; OnCancel; OnDestroy; OnInitDialog; OnOK; OnQueryNewPalette; OutputDebugString; OutputGlError; Polygon; PreCreateWindow; PtInRegion; QueryInterface; RealizePalette; Release; ReleaseConnectionPoint; ReleaseDC; Rotate; SelectObject; SelectPalette; SetPixelFormat; SetRectEmpty; specifyMaterial; StringFromCLSID; SubkeyExists; va_end; wcscpy_s; wglCreateContext; wglGetCurrentContext; wglMakeCurrent

16k4aex6.alert_note(ja-jp,VS.90).gifメモ :

このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。

参照

その他の技術情報

ATL 属性のサンプル