
ATL
文章平均质量分 73
win2ks
这个作者很懒,什么都没留下…
展开
-
CComPtr和CComQIPtr
这里两个对接口指针的封装类,也就是智能指针,使用只能指针有如下优势: 1.析够函数自动释放接口指针 2.处理异常时智能指针可以自动析够 3.赋值操作可以自动处理释放、AddRef的资源管理 4.构造函数、类型转换等自动处理了类似QI等若干问题 CComQIPtr继承了CComPtr,使用CComPtr的地方都可以使用CComQIPtr,而且使用CComQIPtr的地方多数也可原创 2008-06-10 12:20:00 · 3819 阅读 · 0 评论 -
聚合其他接口三部曲(AC6)
AC6,由VS2005的ATL向导生成的默认COM对象代码分析ATL如何实现COM,第六部分。 ATL向导可以帮我们生成可以被聚合的接口,但是如果一个接口要聚合其他接口,需要下面三个步骤。 1.定义IUnknown指针 2.在FinalConstruct中创建获取IUnknown指针,在FinalRelease中释放。 3.使用COM_INTERFACE_ENTRY原创 2008-06-13 08:51:00 · 1429 阅读 · 1 评论 -
各个类的协作关系(AC7)
AC7,由VS2005的ATL向导生成的默认COM对象代码分析ATL如何实现COM,第七部分。 这是张我自己分析ATL向导默认com代码画的一张图,有80多k,比较大,打不开也没关系,翻翻向导生成的代码自己也能感觉到。 发现图片竟然显示不全,无语了,这是图片地址。原创 2008-06-13 09:06:00 · 1294 阅读 · 0 评论 -
通过BEGIN_COM_MAP看接口的三剑客的实现和调用(AC8)
AC8,由VS2005的ATL向导生成的默认COM对象代码分析ATL如何实现COM,第八部分。 接口三剑客AddRef、Release、QueryInterface不用说了,他是在CComObjectRootEx中被实现的,但是调用过程却不是简单的依照虚函数路线向上查找到了这个类,而是由通过了系列宏BEGIN_COM_MAP。 已经说过,我们使用ATL向导添加的class不是最终的原创 2008-06-13 15:50:00 · 6530 阅读 · 4 评论 -
进程内COM对象的创建过程(AC5)
AC5,由VS2005的ATL向导生成的默认COM对象代码分析ATL如何实现COM,第五部分。 Com库创建COM对象可以使用三个方法:CoCreateInstance(IN REFCLSID rclsid, IN LPUNKNOWN pUnkOuter, IN DWORD dwClsContext, IN REFIID riid, OUT LPVOID FAR* ppv);原创 2008-06-13 00:48:00 · 3323 阅读 · 1 评论 -
Calling Managed .NET C# COM Objects from Unmanaged C++ Code
C#创建、使用组件都非常简单,但像我这样的偏执狂自然想用C#创建一个传统的com server,终于找到了一篇文章,创建是可以不过比较麻烦,专用名词叫Calling Managed .NET C# COM Objects from Unmanaged C++ Code,简单试验了一下,我觉得,除非必须这样做,我再也不想用C#给C++写com了。 原文的地址是:http://www.cod转载 2008-06-17 22:16:00 · 1111 阅读 · 0 评论 -
CAutoPtr和CAutoVectorPtr
C++程序员一定很熟悉CAutoPtr,至少它是我接触到的第一个智能指针,而且这个指针转移控制权,这是它非常大一个特色,ATL里也有这个,和STL里是一个东西,只不过这个没有支持异常(没有编译进去)。CAutoVectorPtr是只能数组指针,特别地,它没有构造函数,所以使用起来要分为声明和分配两步。 CAutoPtr pap(new SomeClass); pap->doSomeTh原创 2008-06-10 13:27:00 · 3134 阅读 · 0 评论 -
OBJECT_ENTRY_AUTO的背后(AC2)
AC2,由VS2005的ATL向导生成的默认COM对象代码分析ATL如何实现COM,第二部分。 OBJECT_ENTRY_AUTO相当不起眼的放在我们声明的类的头文件的最底行,但是位置不起眼作用却相当大,我给它的评价是ATL COM的基石。 以XXX表示我们自己的com对象类,OBJECT_ENTRY_AUTO在我们的类名和iid上扩展为(我多贴了其他#pragma)://原创 2008-06-12 22:03:00 · 6129 阅读 · 0 评论 -
_ATL_OBJMAP_ENTRY详解(AC3)
AC3,由VS2005的ATL向导生成的默认COM对象代码分析ATL如何实现COM,第三部分。 当此DLL映射到进程的地址空间中,系统实际调用的是_DllMainCRTStartUp而不是DllMain。_DllMainCRTStartUp函数初始化C运行时库并在其收到DLL_PROCESS_ATTACH通知时创建所有全局的或静态的C++对象。在C运行时库初始化完成之后,_DllMain原创 2008-06-12 23:06:00 · 4193 阅读 · 0 评论 -
简述ATL Default Com中用到的几个宏(AC4)
AC4,由VS2005的ATL向导生成的默认COM对象代码分析ATL如何实现COM,第四部分。 ATL中的宏很多,我看代码有个不太喜欢拆开宏的习惯,在没分析这些宏的时候,总觉得见了不少树木却不见树林,现在才明白,ATL中的宏宛如手术刀一样切入了各个类的内部,而且不少宏充当了ATL骨架的功能。所以如果要看ms vs appwizzard生成的代码,一定要先研究用到的宏。 相对来说宏还原创 2008-06-12 23:27:00 · 1738 阅读 · 0 评论 -
CComBSTR操作种种
CComBSTR是封装了BSTR的一个类。 /* class CComBSTR { public: BSTR m_str; } */ CComBSTR提供了A构造函数、B赋值操作、C获得内部BSTR方法、D连接、E大小写转换操作、F比较操作、G永久性操作等。 CComBSTR提供了8个构造函数、3个赋值操作方法、4个和内部BSTR有关的方法、9个连接方原创 2008-06-09 19:44:00 · 8587 阅读 · 0 评论 -
CString常用操作种种
CString给MFC程序员带来了在那个年代不敢奢望的功能,甚至在VS2005刚发布的时候,为了应对默认UNICODE的问题,我常常使用CString避免显式的宽字符转换。 在现在,好用的CString也是ATL的一部分了。其实ATL里的CString和MFC里的是同一个东东,如果在MFC中已经很熟悉CString了,就没有必要更多的研究了。 下面是我自己觉得常用的几个操作,当然有原创 2008-06-09 22:17:00 · 5943 阅读 · 0 评论 -
CComVariant相关
与使用BSTR相较而言,使用VARIANT算比较简单了,设置了类型信息和数据就完事,而且,从内存管理的角度来说,VARIANT的内存方式也相对接近常规化,因不了解而出问题的概率大大减少了,但是,为了避免万一的情况发生,我们总是不懈努力,这就是CComVariant出现的动机吧(个人诳语丷丷)。 哈哈,其实CComVariant的出现应该从VARIANT的不足谈起(也就是所谓的使用VARI原创 2008-06-09 23:35:00 · 4380 阅读 · 0 评论 -
CComSafeArray
首先Com提供语言无关的array,我们可以这样使用: //定义safe array bound SAFEARRAYBOUND rgsabound[2]; rgsabound[0].cElements = 3; rgsabound[0].lLbound = 0; rgsabound[1].cElements = 4; rgsabound[1].lLbound = 0;原创 2008-06-10 00:50:00 · 3216 阅读 · 0 评论 -
__declspec(allocate("segname"))和__declspec( selectany )(AC1)
AC1,由VS2005的ATL向导生成的默认COM对象代码分析ATL如何实现COM,第一部分。 为了多多研习ATL想到生成的代码,visio、rose、word、excel加上我的笔本全上阵,终于把各个模板类混了个了解、跟宏混了个脸熟。当我借助调试器想把一个classfactory和com对象的由来看个明白的时候,我发现疑惑很多。不过好在简单看出了点门道,但要说清楚,非三言两语可以完成,原创 2008-06-12 00:52:00 · 4818 阅读 · 0 评论 -
ATL中的线程安全(AC9)
AC9,由VS2005的ATL向导生成的默认COM对象代码分析ATL如何实现COM,第九部分。 ATL中的线程安全是由CXXXxxxCriticalSection提供的,使用的policy策略,使用者可以得到Lock、Unlock两个方法来处理同步问题,而且,ATL的诸多policy给使用者提供了恰好足够的线程安全。注意恰好足够的说法,也就是说首先它够用,更重要的是没有额外负担。原创 2008-06-13 18:20:00 · 1803 阅读 · 0 评论