次の方法で共有


ATLTangram 属性サンプル:ATL、MFC、および COM を使用しているサイズの大きなプロジェクトの管理を示します

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

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

セキュリティに関するメモセキュリティに関するメモ

このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。

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

Visual Studio のサンプルにアクセスするには

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

    既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。

  • このサンプルの最新版および他のサンプルの一覧については、MSDN Web サイト上で Visual Studio サンプル 」を参照してください。

サンプルのビルドと実行

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

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

  2. From the Build menu, click Build Solution.

  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

注意

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

参照

その他の技術情報

ATL 属性のサンプル