李sir_Blog

博客园 首页 联系 订阅 管理

随笔分类 -  Com技术

摘要:目录: COM多线程原理与应用目录:前言:套间:套间的定义:套间的分类:套间的进入和退出:对象的同步:组件对象的同步:COM对象线程模型:进程内对象线程模型的种类:ATL对多线程的支持:对象引用的保护:成员变量的保护:COM+导致的变化:上下文概述:上下文对象:调用对象:前言: COM多线程一直是个不容易弄清的问题,我也被困扰了很久,特别是COM在线程方面的术语总是不能统一。本文是为了将我所学所用得做一个总结,本文不保证一定正确,但是会随着时间的推移逐渐完善改正。套间: 套间的定义: 我个人认为COM技术内幕中关于套间的定义是错误的,应采用COM本质论中的定义。COM技术内 阅读全文
posted @ 2011-01-17 20:35 李sir 阅读(4294) 评论(0) 推荐(0) 编辑

摘要:一、COM是一个更好的C++1、COM 是什么Don Box说"COM IS LOVE"。COM 的全称是 Component Object Model 组件对象模型。2、从 C++ 到 DLL 再到 COM2.1 C++如某一软件厂商发布一个类库(CMath四则运算),此时类库的可执行代码将成为客户应用中不可分割的一部分。假设此类库的所产生的机器码在目标可执行文件中占有4MB的空间。当三个应用程序都使用CMath库时,那么每个可执行文件都包含4MB的类库代码(见图1.1)。当三个应用程序共同运行时,他们将会占用12MB的虚拟内存。问题还远不于此。一旦类库厂商发现CMath类库有一个缺陷后,发 阅读全文
posted @ 2011-01-17 20:33 李sir 阅读(1519) 评论(0) 推荐(1) 编辑

摘要:在日常工作中,我看到过许多由不同开发人员编写的 COM 代码。我为许多富于创造性的使用 COM 的工作方式感到惊讶,有一些使 COM 工作的巧妙代码可能连Microsoft 都没有想到。同样,看到一些错误一次又一次地重犯,使我免不了心灰意懒。这些错误很多都与线程和安全有关,完全不成比例,而这也正是 COM 文档资料中最缺少的两个领域。如果不仔细计划,它们也是最可能遇到的并可能会绊住您的两个领域。  在下面的篇幅中,您将读到八位程序员的记述,这些教训都来自他们的痛苦经历。每个故事都是真实的,但为了保护无辜者,名字都已隐去。我的目的是,通过这些真实的 COM 故事,使您不再重蹈其他 COM 程序员 阅读全文
posted @ 2011-01-17 20:31 李sir 阅读(2237) 评论(0) 推荐(3) 编辑

摘要:(1) COM组件实际上是一个C++类,而接口都是纯虚类。组件从接口派生而来。我们可以简单的用纯粹的C++的语法形式来描述COM是个什么东西:  class IObject  {  public:    virtual Function1(...) = 0;    virtual Function2(...) = 0;    ....  };  class MyObject : public IObject  {  public:    virtual Function1(...){...}    virtual Function2(...){...}....  };  IObject就是我们 阅读全文
posted @ 2011-01-17 20:26 李sir 阅读(867) 评论(0) 推荐(0) 编辑

摘要:1、COM对象的理解 COM对象类似于C++语言中类的概念,类的每个实例代表一个COM对象,它也包括属性(即状态)和方法(即操作),状态反映对象的存在,方法就是接口。2、COM对象的标识-CLSIDGUID是一个128位的随机数,重复概率极低。它的值来源于两部分:空间值(网卡地址或随机数)和时间值。获得GUID值可以使用VC++提供的工具:GUIDGen.exe 和 UUIDGen.exe。或者使用COM库的API函数CoCreatGuid()。3、COM对象与C++对象的比较COM对象将数据完全封装在对象的内部。C++对象的封装是在语义上的封装,通过不同的数据类型实现数据的封装。COM对象的 阅读全文
posted @ 2011-01-17 20:23 李sir 阅读(1824) 评论(0) 推荐(0) 编辑

摘要:1、ActiveX控制 ActiveX控制是Microsoft提供的功能强大的程序设计和开发技术。ActiveX控制既是一个自动化对象(当然也是一个标准的COM对象),也是一个界面元素,如同Windows的普通控制一样。 ActiveX控制是一门综合技术,它涉及到COM和OLE的许多技术精华,同时也与Windows操作系统紧密结合起来,它可作为Windows标准控制的一种扩充机制。 Microsoft把这种在Internet上使用的控制与OCX一起统称为ActiveX控制,并且把所有建立在COM和OLE基础上以及与Internet有关的技术统称为ActiveX技术。2、ActiveX控制的技术 阅读全文
posted @ 2011-01-17 17:29 李sir 阅读(2384) 评论(0) 推荐(0) 编辑

摘要:本文为刚刚接触COM的程序员提供编程指南,解释COM服务器内幕以及如何用C++编写自己的接口。继上一篇COM编程入门之后,本文将讨论有关 COM服务器的内容,解释编写自己的COM接口和COM服务器所需要的步骤和知识,以及详细讨论当COM库对COM服务器进行调用时,COM服务器运行的 内部机制。  如果你读过上一篇文章。应该很熟悉COM客户端是怎么会事了。本文将讨论COM的另一端——COM服务器。内容包括如何用C++编写一个简单的不涉及 类库的COM服务器。深入到创建COM服务器的内部过程,毫无遮掩地研究那些库代码是充分理解COM服务器内部机制的最好方法。本文假设你精通C++并掌握了上一篇文章所 阅读全文
posted @ 2011-01-17 17:03 李sir 阅读(1062) 评论(0) 推荐(0) 编辑

摘要:VC操作Windows快捷方式(自己总结)二个操作:新建和解析主要用到的是COM组件。IShellLink和IPersistFile需要添加的头函数shobjidl.hIPersistFile主要用到两个成员函数:1、Save。保存内容到文件中去2、Load。读取Load的函数原型HRESULT Load(LPCOLSTR pszFileName, //快捷方式的文件名,应该是ANSI字符DWORD dwMode//读取方式);dwMode可取如下值:STGM_READ:只读 STGM_WRITE:只写 STGM_READWRITE:读写IShellLink主要成员:1、GetArgume 阅读全文
posted @ 2011-01-17 16:12 李sir 阅读(7906) 评论(1) 推荐(1) 编辑

摘要:本文的目的是为刚刚接触COM的程序员提供编程指南,并帮助他们理解COM的基本概念。内容包括COM规范简介,重要的COM术语以及如何重用现有的COM组件。本文不包括如何编写自己的COM对象和接口。  COM即组件对象模型,是Component Object Model 取前三个字母的缩写,这三个字母在当今Windows的世界中随处可见。随时涌现出来的大把大把的新技术都以COM为基础。各种文档中也充斥着诸如COM 对象、接口、服务器之类的术语。因此,对于一个程序员来说,不仅要掌握使用COM的方法,而且还要彻底熟悉COM的所有一切。  本文由浅入深描述COM的内在运行机制,教你如何使用第三方提供的C 阅读全文
posted @ 2011-01-17 16:08 李sir 阅读(1607) 评论(0) 推荐(0) 编辑

摘要:大家都知道设置WINDOWS桌面墙纸的WIN32 API是SystemParametersInfo, 使用SPI_SETDESKWALLPAPER参数便能设置墙纸:  ::SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\\ABitmap.bmp", SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);  但问题并没有解决,因为这个WIN32 API有很大的局限性  1. 无法把jpeg, gif等其他非位图格式的图片设为墙纸。  2. 无法调整墙纸的式样,即无法设置墙纸为居中,平铺或拉伸。(当然我们可以通过 阅读全文
posted @ 2011-01-17 16:04 李sir 阅读(1381) 评论(0) 推荐(0) 编辑

摘要:Step by Step COM TutorialContentsIntroductionInterfacesStep 1:Create the IDL fileStep 2:Generating the type libraryStep 3:Derive from IAddStep 4:Implement the methods of IAddStep 5:Implementing IUnkownStep 6:FactoryStep 7:Implementing the methods of IClassFactoryStep 8:Implementing DllGetClassObject 阅读全文
posted @ 2011-01-17 13:18 李sir 阅读(448) 评论(0) 推荐(0) 编辑

摘要:COM接口指针很危险,因为使用过程中需要每一个使用者都要严格并且正确的AddRef和Release,一旦出现问题,就会造成对象不能被正常释放,或者对象被重复删除,造成程序崩溃。所以使用COM接口,必须小心翼翼才行。但是,即使所有的代码中,都正确的AddRef和Release,也不一定能保证万无一失,例如:void SomeApp( IHello * pHello ){IHello* pCopy = pHello;pCopy-AddRef(); OtherApp();pCopy-Hello();pCopy-Release();}看起来好像无懈可击,但是假设OtherApp中抛出了异常,那么 阅读全文
posted @ 2011-01-07 14:00 李sir 阅读(20130) 评论(1) 推荐(0) 编辑

摘要:本文的目的是为刚刚接触COM的程序员提供编程指南,并帮助他们理解COM的基本概念。内容包括COM规范简介,重要的COM术语以及如何重用现有的COM组件。本文不包括如何编写自己的COM对象和接口。  COM即组件对象模型,是Component Object Model 取前三个字母的缩写,这三个字母在当今Windows的世界中随处可见。随时涌现出来的大把大把的新技术都以COM为基础。各种文档中也充斥... 阅读全文
posted @ 2010-11-22 19:25 李sir 阅读(5370) 评论(0) 推荐(1) 编辑