COM
妖精的配角
一个一直在努力ing的人
展开
-
COM线程模型 - STA - Part I
From : http://blog.csdn.net/zj510/article/details/38824353 COM里面的线程模型应该是COM里面比较困难的一部分了,我自己也是花了很多时间,而且也还不是很懂。最近又重新看了一下线程模型,为了加深自己的学习,特地写下这篇文章。MSDN上有很多信息,比如http://msdn.microsoft.com/en-us/libr转载 2014-11-07 11:16:03 · 843 阅读 · 0 评论 -
COM连接点 - Part III - 一个COM接口实现多个连接点
From: http://blog.csdn.net/zj510/article/details/39080353转载 2014-11-07 12:11:25 · 1322 阅读 · 0 评论 -
CreateFileMapping用法
CreateFileMapping用法 CreateFileMapping的MSDN翻译和使用心得 测试创建和打开文件映射的时候老是得到"句柄无效"的错误, 仔细看了MSDN以后才发觉是函数认识不透, 这里把相关的解释翻译出来HANDLE CreateFileMapping( HANDLE hFile, //物理文转载 2014-11-07 11:12:20 · 1065 阅读 · 0 评论 -
COM线程模型 - STA接口 - Part III (MTA客户,跨线程传递COM对象)
From: http://blog.csdn.net/zj510/article/details/38852619转载 2014-11-07 11:19:32 · 544 阅读 · 0 评论 -
IDispatch接口 - Part I - GetIDsOfNames和Invoke
IDispatch接口是COM自动化的核心。其实,IDispatch这个接口本身也很简单,只有4个方法:[cpp] view plaincopyprint?IDispatch : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(转载 2014-11-07 12:17:14 · 1242 阅读 · 0 评论 -
COM线程模型 - Part VI - COM服务端(STA组件)创建线程
From: http://blog.csdn.net/zj510/article/details/39290061 当我们在COM组件内部创建线程的时候,又是怎么样的一种情况呢?这个地方跟组件的具体类型有关了,先来看看STA组件的情况。STA组件内部创建线程先看一段代码,CMyCarEx是一个STA组件,我们在Run()函数里面起了1000个线程。每个线程就会把m_nMil转载 2014-11-07 12:15:13 · 669 阅读 · 0 评论 -
COM连接点 - Part II - 最简单的例子 (1)
From: http://blog.csdn.net/zj510/article/details/39056097 连接点,connection point,在COM里面也是挺重要的。简单讲,COM里面的连接点就好像是C语言的回调函数,只不过它是基于面向对象实现的。连接点的作用也就是COM对象将一些事件通知客户(调用者)。先来做一个简单的连接点例子吧,之后再慢慢探讨。用转载 2014-11-07 12:09:50 · 2310 阅读 · 1 评论 -
FileMapping
FileMapping 与虚拟内存一样,内存映射文件可以用来保留一个地址空间的区域,并将物理存储器提交给该区域。它们之间的差别是,物理存储器来自一个已经位于磁盘上的文件,而不是系统的页文件。一旦该文件被映射,就可以访问它,就像整个文件已经加载内存一样。内存映射文件可以用于3个不同的目的:• 系统使用内存映射文件,以便加载和执行. e x e和D L转载 2014-11-07 10:07:36 · 7466 阅读 · 0 评论 -
COM线程模型 - STA接口 - Part II -(跨线程传递对象,消息循环)
From : http://blog.csdn.net/zj510/article/details/38829069转载 2014-11-07 11:17:12 · 657 阅读 · 0 评论 -
COM线程模型 - MTA接口 - Part II - (传递MTA COM对象给STA套间线程)
接上篇,能否把一个MTA套间里面创建的COM对象传递个STA套间呢?看MSDN上的说明:A client or server that supports both single-threaded and multithreaded apartments will have one multithreaded apartment, containing all threads initializ转载 2014-11-07 11:26:21 · 729 阅读 · 0 评论 -
IDispatch接口 - Part IV - 跨语言调用
当一个COM接口支持IDispatch的时候(Dual接口),它就可以被其他语言调用。这里我用perl试了一下。perl测试代码[html] view plaincopyprint?use warnings; use strict; use Win32::OLE; use constant ADS_UF_ACCOUNTDISABLE => 2;转载 2014-11-07 12:19:38 · 433 阅读 · 0 评论 -
COM连接点 - Part V - CComDynamicUnkArray::Add问题
From : http://blog.csdn.net/zj510/article/details/39178003 无意中发现一个有趣的问题,连接点中用于保存接收器对象的容器CComDynamicUnkArray有一些小问题。calloc和_recalloc的参数传递问题首先看一下连接点的声明:[cpp] view plaincopyprint?转载 2014-11-07 12:14:04 · 654 阅读 · 0 评论 -
COM连接点 - Part I - 基本原理
From: http://blog.csdn.net/zj510/article/details/39079221 这次我们来看一下连接点的基本工作原理。画了一个简单的图:从上面的图,大概也可以看到基本结构了。如果一个COM对象要支持连接点的话,那么这个对象类一定要从IConnectionPointImpl继承下来。通常,会有一个proxy类,上图中的CProxy_IMyCar转载 2014-11-07 12:08:42 · 2106 阅读 · 0 评论 -
COM线程模型 - MTA接口 - Part IV - (运行线程)
From : 一个STA对象只能属于一个STA套间,那么一个STA对象一定是在一个线程里面运行的。所以STA对象不需要考虑并发,因为它永远是串行运行的。那么一个MTA对象在哪个线程里面运行的?MTA套间调用MTA对象看下面这段代码:[cpp] view plaincopyprint?// TestCom.cpp : Defines th转载 2014-11-07 11:29:29 · 548 阅读 · 0 评论 -
COM线程模型 - MTA接口 - Part III -(STA套间调用MTA对象)
From : http://blog.csdn.net/zj510/article/details/39008107 那么如果在STA套间里面创建MTA对象,又如何?看这段代码:[cpp] view plaincopyprint?// TestCom.cpp : Defines the entry point for the console appl转载 2014-11-07 11:28:38 · 824 阅读 · 0 评论 -
IDispatch接口 - Part II -CComDispatchDriver智能指针
前面一篇文章讲述了怎么样通过GetIDsOfNames和Invoke来调用一个支持Idispach的COM组件。看起来好像很麻烦,实际上,COM已经提供了一个专门的智能指针来解决这个问题。CComDispatchDriver看一下它的定义,实际上它就是一个特殊的CComQIPtr。[cpp] view plaincopyprint?typedef C转载 2014-11-07 12:18:05 · 1151 阅读 · 0 评论 -
COM连接点 - Part IV - IDL里面一定需要增加新的事件吗?
From: http://blog.csdn.net/zj510/article/details/39080699转载 2014-11-07 12:13:50 · 569 阅读 · 0 评论 -
COM线程模型 - MTA接口 - Part I
From: http://blog.csdn.net/zj510/article/details/38857239 除了STA之外,COM组件的另外一种非常重要的模型就是MTA.有关MTA,先阅读MSDN, http://msdn.microsoft.com/en-us/library/windows/desktop/ms693421(v=vs.85).aspx需要仔细阅读。罗转载 2014-11-07 11:24:14 · 762 阅读 · 0 评论 -
IDispatch接口 - Part III - Dual和Custom
当用ATL向导来创建一个接口的时候,向导会让我们选择Dual或者Custom.那么它们到底有什么分别呢?Dual鼠标移上去,其实是有个说明的。下面的截图没有显示后面的一些文字,实际意思是说这个接口同时支持IDispatch方式和vtable方式,这大概也就是双接口(Dual)名字的来源。vtable调用方式,指的是直接通过接口指针的虚函数表。比如[html]转载 2014-11-07 12:19:42 · 517 阅读 · 0 评论