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 サーバーのクライアントとして使用する例も示します。
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
このサンプルをビルドして実行するには
ソリューション ファイル atltangram.sln を開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
[デバッグ] メニューの [デバッグなしで開始] をクリックします。
ダイアログ ボックスが表示されます。各オプションを選択してください。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++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。 |