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\ にインストールされています。
サンプルのビルドと実行
このサンプルをビルドして実行するには
ソリューション ファイル atltangram.sln を開きます。
From the Build menu, click Build Solution.
メニューの [デバッグ、 デバッグなしで開始] をクリックします。
ダイアログ ボックスが表示されます:いずれかのオプションを選択します。 Tangram プログラムが開始されます。
大規模なプロジェクトの管理
ソリューションでは、IDE での依存関係が確立されています。 これらの依存関係は、サンプルの既定のディレクトリ構造で機能し、パスに関連しています。
依存関係の階層は、次のとおりです。
MFCTangram
ATLGLWorld
ATLGdiWorld
ATLTangramCanvas
ATLModel
ATLModelExe
ATLModel
ATLModel
このサンプルのプロジェクト設定は、すべて完了しています。 次の手順に従ってプロジェクトの依存関係をチェックします。
[プロジェクト] メニューの [プロパティ] をクリックします。
ソリューション エクスプローラーで Atltangram ソリューションを選択します。
プロパティ ページの ダイアログ ボックスで、[共通プロパティ] フォルダーを展開し、[デバッグ ソース ファイル を選択します。 を調べて以下のパス ソース ファイルを ボックスからを検索します。
[プロジェクト依存関係] をクリックし、依存プロジェクト名をチェックします。
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++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。