深入解析ATL 笔记1 添加一个simple object时做了什么

在图书馆拿到这本不错的书,英文名为“ATL Internals”,第二版,用的是VC2005和ATL8。作者都是很牛的,决定好好看一下,补充一下ATL, COM的知识。一边看一遍记笔记,。。恩。。

首先新建一个ATL dll 工程,添加一个ATL Simple Object, 设置用default,然后用winmerge看看多了什么东西 .

添加的文件:

 

SimpleObj2.cpp

SimpleObj2.h

SimpleObj2.rgs

修改的文件:

atlDemo.idl
atlDemo.rc
atlDemo.vcproj
resource.h


先看看修改的文件,主要是idl

 1 深入解析ATL 笔记1 添加一个simple object时做了什么 [
 2 深入解析ATL 笔记1 添加一个simple object时做了什么     object ,
 3 深入解析ATL 笔记1 添加一个simple object时做了什么    uuid(66B9309A- 2907 -44CD-8DE9-0B5D774147DD),
 4 深入解析ATL 笔记1 添加一个simple object时做了什么    dual,
 5 深入解析ATL 笔记1 添加一个simple object时做了什么    nonextensible,
 6 深入解析ATL 笔记1 添加一个simple object时做了什么    helpstring( " ISimpleObj2 Interface " ),
 7 深入解析ATL 笔记1 添加一个simple object时做了什么    pointer_default(unique)
 8 深入解析ATL 笔记1 添加一个simple object时做了什么]
 9 深入解析ATL 笔记1 添加一个simple object时做了什么interface ISimpleObj2 : IDispatch{
10 深入解析ATL 笔记1 添加一个simple object时做了什么};

 

以及在library atlDemoLib下面添加的

 

 1 深入解析ATL 笔记1 添加一个simple object时做了什么 [
 2 深入解析ATL 笔记1 添加一个simple object时做了什么        uuid(24A41D8D- 5367 -4C6B-A7D3-3930361A7387),
 3 深入解析ATL 笔记1 添加一个simple object时做了什么        helpstring( " _ISimpleObj2Events Interface " )
 4 深入解析ATL 笔记1 添加一个simple object时做了什么    ]
 5 深入解析ATL 笔记1 添加一个simple object时做了什么    dispinterface _ISimpleObj2Events
 6 深入解析ATL 笔记1 添加一个simple object时做了什么    {
 7 深入解析ATL 笔记1 添加一个simple object时做了什么         properties:
 8 深入解析ATL 笔记1 添加一个simple object时做了什么         methods:
 9 深入解析ATL 笔记1 添加一个simple object时做了什么    };
10 深入解析ATL 笔记1 添加一个simple object时做了什么    [
11 深入解析ATL 笔记1 添加一个simple object时做了什么        uuid(220C4A97-B240- 4443 -BEE9-73D15D66B92D),
12 深入解析ATL 笔记1 添加一个simple object时做了什么        helpstring( " SimpleObj2 Class " )
13 深入解析ATL 笔记1 添加一个simple object时做了什么    ]
14 深入解析ATL 笔记1 添加一个simple object时做了什么    coclass SimpleObj2
15 深入解析ATL 笔记1 添加一个simple object时做了什么    {
16 深入解析ATL 笔记1 添加一个simple object时做了什么        [default] interface ISimpleObj2;
17 深入解析ATL 笔记1 添加一个simple object时做了什么        [default, source] dispinterface _ISimpleObj2Events;

18深入解析ATL 笔记1 添加一个simple object时做了什么    };

 

 多了的文件内容

_ISimpleObj2Events_CP.h:

1 深入解析ATL 笔记1 添加一个simple object时做了什么 #pragma  once
2 深入解析ATL 笔记1 添加一个simple object时做了什么
3 深入解析ATL 笔记1 添加一个simple object时做了什么template  < class  T >
4 深入解析ATL 笔记1 添加一个simple object时做了什么 class  CProxy_ISimpleObj2Events :  public  IConnectionPointImpl < T,  & __uuidof( _ISimpleObj2Events ), CComDynamicUnkArray >
5 深入解析ATL 笔记1 添加一个simple object时做了什么 {
6深入解析ATL 笔记1 添加一个simple object时做了什么    //Warning this class will  be regenerated by the wizard.
7深入解析ATL 笔记1 添加一个simple object时做了什么public:
8深入解析ATL 笔记1 添加一个simple object时做了什么}
;
9 深入解析ATL 笔记1 添加一个simple object时做了什么

 SimpleObj2.cpp:

1 深入解析ATL 笔记1 添加一个simple object时做了什么 //  SimpleObj2.cpp : Implementation of CSimpleObj2
2 深入解析ATL 笔记1 添加一个simple object时做了什么
3 深入解析ATL 笔记1 添加一个simple object时做了什么#include  " stdafx.h "
4 深入解析ATL 笔记1 添加一个simple object时做了什么#include  " SimpleObj2.h "
5 深入解析ATL 笔记1 添加一个simple object时做了什么
6 深入解析ATL 笔记1 添加一个simple object时做了什么
7 深入解析ATL 笔记1 添加一个simple object时做了什么 //  CSimpleObj2
8 深入解析ATL 笔记1 添加一个simple object时做了什么
9 深入解析ATL 笔记1 添加一个simple object时做了什么

SimpleObj2.h

 1 深入解析ATL 笔记1 添加一个simple object时做了什么 //  SimpleObj2.h : Declaration of the CSimpleObj2
 2 深入解析ATL 笔记1 添加一个simple object时做了什么
 3 深入解析ATL 笔记1 添加一个simple object时做了什么 #pragma  once
 4 深入解析ATL 笔记1 添加一个simple object时做了什么#include  " resource.h "         //  main symbols
 5 深入解析ATL 笔记1 添加一个simple object时做了什么
 6 深入解析ATL 笔记1 添加一个simple object时做了什么#include  " atlDemo_i.h "
 7 深入解析ATL 笔记1 添加一个simple object时做了什么#include  " _ISimpleObj2Events_CP.h "
 8 深入解析ATL 笔记1 添加一个simple object时做了什么
 9 深入解析ATL 笔记1 添加一个simple object时做了什么
10 深入解析ATL 笔记1 添加一个simple object时做了什么 #if  defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
11 深入解析ATL 笔记1 添加一个simple object时做了什么 #error  "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
12 深入解析ATL 笔记1 添加一个simple object时做了什么 #endif
13 深入解析ATL 笔记1 添加一个simple object时做了什么
14 深入解析ATL 笔记1 添加一个simple object时做了什么
15 深入解析ATL 笔记1 添加一个simple object时做了什么
16 深入解析ATL 笔记1 添加一个simple object时做了什么 //  CSimpleObj2
17 深入解析ATL 笔记1 添加一个simple object时做了什么
18 深入解析ATL 笔记1 添加一个simple object时做了什么 class  ATL_NO_VTABLE CSimpleObj2 :
19 深入解析ATL 笔记1 添加一个simple object时做了什么     public  CComObjectRootEx < CComSingleThreadModel > ,
20 深入解析ATL 笔记1 添加一个simple object时做了什么     public  CComCoClass < CSimpleObj2,  & CLSID_SimpleObj2 > ,
21 深入解析ATL 笔记1 添加一个simple object时做了什么     public  IConnectionPointContainerImpl < CSimpleObj2 > ,
22 深入解析ATL 笔记1 添加一个simple object时做了什么     public  CProxy_ISimpleObj2Events < CSimpleObj2 > ,
23 深入解析ATL 笔记1 添加一个simple object时做了什么     public  IDispatchImpl < ISimpleObj2,  & IID_ISimpleObj2,  & LIBID_atlDemoLib,  /*wMajor =*/   1 /*wMinor =*/   0 >
24 深入解析ATL 笔记1 添加一个simple object时做了什么 {
25深入解析ATL 笔记1 添加一个simple object时做了什么public:
26深入解析ATL 笔记1 添加一个simple object时做了什么    CSimpleObj2()
27深入解析ATL 笔记1 添加一个simple object时做了什么    {
28深入解析ATL 笔记1 添加一个simple object时做了什么    }

29深入解析ATL 笔记1 添加一个simple object时做了什么
30深入解析ATL 笔记1 添加一个simple object时做了什么DECLARE_REGISTRY_RESOURCEID(IDR_SIMPLEOBJ2)
31深入解析ATL 笔记1 添加一个simple object时做了什么
32深入解析ATL 笔记1 添加一个simple object时做了什么
33深入解析ATL 笔记1 添加一个simple object时做了什么BEGIN_COM_MAP(CSimpleObj2)
34深入解析ATL 笔记1 添加一个simple object时做了什么    COM_INTERFACE_ENTRY(ISimpleObj2)
35深入解析ATL 笔记1 添加一个simple object时做了什么    COM_INTERFACE_ENTRY(IDispatch)
36深入解析ATL 笔记1 添加一个simple object时做了什么    COM_INTERFACE_ENTRY(IConnectionPointContainer)
37深入解析ATL 笔记1 添加一个simple object时做了什么END_COM_MAP()
38深入解析ATL 笔记1 添加一个simple object时做了什么
39深入解析ATL 笔记1 添加一个simple object时做了什么BEGIN_CONNECTION_POINT_MAP(CSimpleObj2)
40深入解析ATL 笔记1 添加一个simple object时做了什么    CONNECTION_POINT_ENTRY(__uuidof(_ISimpleObj2Events))
41深入解析ATL 笔记1 添加一个simple object时做了什么END_CONNECTION_POINT_MAP()
42深入解析ATL 笔记1 添加一个simple object时做了什么
43深入解析ATL 笔记1 添加一个simple object时做了什么
44深入解析ATL 笔记1 添加一个simple object时做了什么    DECLARE_PROTECT_FINAL_CONSTRUCT()
45深入解析ATL 笔记1 添加一个simple object时做了什么
46深入解析ATL 笔记1 添加一个simple object时做了什么    HRESULT FinalConstruct()
47深入解析ATL 笔记1 添加一个simple object时做了什么    {
48深入解析ATL 笔记1 添加一个simple object时做了什么        return S_OK;
49深入解析ATL 笔记1 添加一个simple object时做了什么    }

50深入解析ATL 笔记1 添加一个simple object时做了什么
51深入解析ATL 笔记1 添加一个simple object时做了什么    void FinalRelease()
52深入解析ATL 笔记1 添加一个simple object时做了什么    {
53深入解析ATL 笔记1 添加一个simple object时做了什么    }

54深入解析ATL 笔记1 添加一个simple object时做了什么
55深入解析ATL 笔记1 添加一个simple object时做了什么public:
56深入解析ATL 笔记1 添加一个simple object时做了什么
57深入解析ATL 笔记1 添加一个simple object时做了什么}
;
58 深入解析ATL 笔记1 添加一个simple object时做了什么
59 深入解析ATL 笔记1 添加一个simple object时做了什么OBJECT_ENTRY_AUTO(__uuidof(SimpleObj2), CSimpleObj2)
60 深入解析ATL 笔记1 添加一个simple object时做了什么

 SimpleObj2.rgs

 1 深入解析ATL 笔记1 添加一个simple object时做了什么 HKCR
 2 深入解析ATL 笔记1 添加一个simple object时做了什么 {
 3深入解析ATL 笔记1 添加一个simple object时做了什么    atlDemo.SimpleObj2.1 = s 'SimpleObj2 Class'
 4深入解析ATL 笔记1 添加一个simple object时做了什么    {
 5深入解析ATL 笔记1 添加一个simple object时做了什么        CLSID = s '{220C4A97-B240-4443-BEE9-73D15D66B92D}'
 6深入解析ATL 笔记1 添加一个simple object时做了什么    }

 7深入解析ATL 笔记1 添加一个simple object时做了什么    atlDemo.SimpleObj2 = s 'SimpleObj2 Class'
 8深入解析ATL 笔记1 添加一个simple object时做了什么    {
 9深入解析ATL 笔记1 添加一个simple object时做了什么        CLSID = s '{220C4A97-B240-4443-BEE9-73D15D66B92D}'
10深入解析ATL 笔记1 添加一个simple object时做了什么        CurVer = s 'atlDemo.SimpleObj2.1'
11深入解析ATL 笔记1 添加一个simple object时做了什么    }

12深入解析ATL 笔记1 添加一个simple object时做了什么    NoRemove CLSID
13深入解析ATL 笔记1 添加一个simple object时做了什么    {
14深入解析ATL 笔记1 添加一个simple object时做了什么        ForceRemove {220C4A97-B240-4443-BEE9-73D15D66B92D} = s 'SimpleObj2 Class'
15深入解析ATL 笔记1 添加一个simple object时做了什么        {
16深入解析ATL 笔记1 添加一个simple object时做了什么            ProgID = s 'atlDemo.SimpleObj2.1'
17深入解析ATL 笔记1 添加一个simple object时做了什么            VersionIndependentProgID = s 'atlDemo.SimpleObj2'
18深入解析ATL 笔记1 添加一个simple object时做了什么            ForceRemove 'Programmable'
19深入解析ATL 笔记1 添加一个simple object时做了什么            InprocServer32 = s '%MODULE%'
20深入解析ATL 笔记1 添加一个simple object时做了什么            {
21深入解析ATL 笔记1 添加一个simple object时做了什么                val ThreadingModel = s 'Apartment'
22深入解析ATL 笔记1 添加一个simple object时做了什么            }

23深入解析ATL 笔记1 添加一个simple object时做了什么            'TypeLib' = s '{CFE54601-E42B-4851-8A14-D259630A8648}'
24深入解析ATL 笔记1 添加一个simple object时做了什么        }

25深入解析ATL 笔记1 添加一个simple object时做了什么    }

26深入解析ATL 笔记1 添加一个simple object时做了什么}

27 深入解析ATL 笔记1 添加一个simple object时做了什么

 

 添加一个叫TestXXX地方法之后,多了这些东东

 1 深入解析ATL 笔记1 添加一个simple object时做了什么
 2 深入解析ATL 笔记1 添加一个simple object时做了什么 interface  IMySimpleObj : IDispatch {
 3深入解析ATL 笔记1 添加一个simple object时做了什么    [id(1), helpstring("method Test")] HRESULT TestXXX(void);
 4深入解析ATL 笔记1 添加一个simple object时做了什么}
;
 5 深入解析ATL 笔记1 添加一个simple object时做了什么
 6 深入解析ATL 笔记1 添加一个simple object时做了什么
 7 深入解析ATL 笔记1 添加一个simple object时做了什么STDMETHODIMP CMySimpleObj::TestXXX(BSTR str)
 8 深入解析ATL 笔记1 添加一个simple object时做了什么 {
 9深入解析ATL 笔记1 添加一个simple object时做了什么    // TODO: Add your implementation code here
10深入解析ATL 笔记1 添加一个simple object时做了什么
11深入解析ATL 笔记1 添加一个simple object时做了什么    return S_OK;
12深入解析ATL 笔记1 添加一个simple object时做了什么}

13 深入解析ATL 笔记1 添加一个simple object时做了什么
14 深入解析ATL 笔记1 添加一个simple object时做了什么
15 深入解析ATL 笔记1 添加一个simple object时做了什么 class  ATL_NO_VTABLE CMySimpleObj :
16 深入解析ATL 笔记1 添加一个simple object时做了什么     public  CComObjectRootEx < CComSingleThreadModel > ,
17 深入解析ATL 笔记1 添加一个simple object时做了什么     public  CComCoClass < CMySimpleObj,  & CLSID_MySimpleObj > ,
18 深入解析ATL 笔记1 添加一个simple object时做了什么     public  IDispatchImpl < IMySimpleObj,  & IID_IMySimpleObj,  & LIBID_atlDemoLib,  /*wMajor =*/   1 /*wMinor =*/   0 >
19 深入解析ATL 笔记1 添加一个simple object时做了什么 {
20深入解析ATL 笔记1 添加一个simple object时做了什么    STDMETHOD(TestXXX)(BSTR str);

 

 添加一个叫MyProperty的属性后,多了这些

 1 深入解析ATL 笔记1 添加一个simple object时做了什么
 2 深入解析ATL 笔记1 添加一个simple object时做了什么 interface  IMySimpleObj : IDispatch {
 3深入解析ATL 笔记1 添加一个simple object时做了什么    [propget, id(4), helpstring("property MyProperty")] HRESULT MyProperty([out, retval] BSTR* pVal);
 4深入解析ATL 笔记1 添加一个simple object时做了什么    [propput, id(4), helpstring("property MyProperty")] HRESULT MyProperty([in] BSTR newVal);
 5深入解析ATL 笔记1 添加一个simple object时做了什么}
;
 6 深入解析ATL 笔记1 添加一个simple object时做了什么
 7 深入解析ATL 笔记1 添加一个simple object时做了什么
 8 深入解析ATL 笔记1 添加一个simple object时做了什么STDMETHODIMP CMySimpleObj::get_MyProperty(BSTR *  pVal)
 9 深入解析ATL 笔记1 添加一个simple object时做了什么 {
10深入解析ATL 笔记1 添加一个simple object时做了什么    // TODO: Add your implementation code here
11深入解析ATL 笔记1 添加一个simple object时做了什么
12深入解析ATL 笔记1 添加一个simple object时做了什么    return S_OK;
13深入解析ATL 笔记1 添加一个simple object时做了什么}

14 深入解析ATL 笔记1 添加一个simple object时做了什么
15 深入解析ATL 笔记1 添加一个simple object时做了什么STDMETHODIMP CMySimpleObj::put_MyProperty(BSTR newVal)
16 深入解析ATL 笔记1 添加一个simple object时做了什么 {
17深入解析ATL 笔记1 添加一个simple object时做了什么    // TODO: Add your implementation code here
18深入解析ATL 笔记1 添加一个simple object时做了什么
19深入解析ATL 笔记1 添加一个simple object时做了什么    return S_OK;
20深入解析ATL 笔记1 添加一个simple object时做了什么}

21 深入解析ATL 笔记1 添加一个simple object时做了什么
22 深入解析ATL 笔记1 添加一个simple object时做了什么
23 深入解析ATL 笔记1 添加一个simple object时做了什么 class  ATL_NO_VTABLE CMySimpleObj  {
24深入解析ATL 笔记1 添加一个simple object时做了什么    STDMETHOD(get_MyProperty)(BSTR* pVal);
25深入解析ATL 笔记1 添加一个simple object时做了什么    STDMETHOD(put_MyProperty)(BSTR newVal);

 

你可能感兴趣的:(object)