
ATL/WTL
ysjyniiq
C++ ing
展开
-
ATL内部创建COM对象
<br />假如接口为IA,其类为CA,在内部创建此COM Object的标准方法:<br />CComObject<CA> * pObjA;<br />CComObject<CA>:: CreateInstance(&pObjA);<br />//此时pObjA的m_dwRef=0;所以如果要使用必须AddRef或者QueryInterface来增加引用,否则在与其它类组合使用的时候(其它类是按规范进行操作),会导致对象因为引用少于0而被delete掉<br />当然除了CComObject外,还有其它类原创 2011-05-18 10:27:00 · 1277 阅读 · 0 评论 -
CComPtr与CComQIPtr的区别
<br />首先CComQIPtr是CComPtr的子类,所以CComQIPtr有更多功能。<br />CComQIPtr多一个IID,模板里需要这个参数,但这个参数是默认参数<br />下面两种形式都可以<br />CComQIPtr<IA,IID_IA> spQIIA; <br />CComQIPtr<IA > spQIIA;<br />而CComPtr则要<br />CComPtr<IA > spIA;<br /> <br />CComPtr较简单,但它的代价就是更少的兼容性,下面代码来说明:<br原创 2011-05-18 10:17:00 · 1371 阅读 · 0 评论 -
COM中的各个ID分析
(一) 说明:CLSID,IID,LIBID,APPID进入注册表的只有CLSID,APPID和LIBID,IID永远只会沉默地呆在IDL里面一个DLL或者一个EXE只有一个APPID一个DLL或EXE里可以有N个CLSID(对象)每个CLSID只会对应一个LIBID第个CLSID可以有N个IID(接口)其关系图如下: CLSID是对象的唯一标识,尽管LIB原创 2011-05-18 10:12:00 · 2058 阅读 · 0 评论 -
ATL COM中的Type Library
Type Library(一) 用途?只要用到IDispatch的地方,几乎都需要用到Type Library。那如果用到IDispatch而不想Type Library可以吗?答案可以肯定是可以的,但会很麻烦。下面会讲到为什么非用Type libreary不可。 (二) Type libreary生存在何地?生存在DLL或EXE文件里面。 (三)原创 2011-05-18 10:02:00 · 2565 阅读 · 0 评论 -
IDispEventSimpleImpl和IDispEventImpl应用分析
ATL所自带响应Event的类有两个IDispEventSimpleImplIDispEventImpl它们的区别是一个是否带类型库,现在看看他们的模板参数template class ATL_NO_VTABLE IDispEventSimpleImpl : public _IDispEventLocator{};template <UINT nID, class T, c原创 2011-05-18 10:22:00 · 3058 阅读 · 1 评论 -
WTL的SDI中Edit控件无法使用快捷键原因
在WTL中有时候需要SDI,MDI,或者TDI,如果这些视图中带有Edit控件,或者工具栏中嵌入Edit控件,会发现control+C, control+V,这此相似的快捷键会失效,有时候甚至一些按键都直接失灵。但这些控件如果放在对话框中则是正常的。很久之前解决过种问题,但没有非常细致的研究是什么原因,这几天闲着蛋痛,总结了一下。一开始的我是找到了CEditCommand(在atlctrl原创 2012-04-03 23:24:51 · 1225 阅读 · 0 评论