<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>COM, OLE, ATL ...</title><link>http://blog.vckbase.com/howto/category/912.html</link><description>COM, OLE, ATL ...</description><managingEditor>莫问春秋</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>莫问春秋</dc:creator><title>ATL派生类小结  -_-</title><link>http://blog.vckbase.com/howto/archive/2006/05/02/19881.html</link><pubDate>Tue, 02 May 2006 15:36:00 GMT</pubDate><guid>http://blog.vckbase.com/howto/archive/2006/05/02/19881.html</guid><wfw:comment>http://blog.vckbase.com/howto/comments/19881.html</wfw:comment><comments>http://blog.vckbase.com/howto/archive/2006/05/02/19881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/howto/comments/commentRss/19881.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/howto/services/trackbacks/19881.html</trackback:ping><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ATL提供了一种分层实现IUnknown的方法，CComXXXThreadModel类表示的最上层，为存放在STA和MTA中的对象所要求的同步提供了&amp;#8220;辅助函数&amp;#8221;&amp;#174;1和&amp;#8220;类型定义&amp;#8221;&amp;#174;2。第二层是CComObjectRootEx，他利用线程模型类来支持恰好的&amp;#8220;线程安全&amp;#8221;的AddRef和Release实现以及对象级的锁定，他的基类是CComObjectRootBase。在&amp;#8220;我们的类&amp;#8221;&amp;#174;3中使用&amp;#8220;&lt;FONT color=#000000&gt;相关宏&amp;#8221;&lt;/FONT&gt;&amp;#174;４建立了一个接口映射表。CComObjectRootBase利用这个接口映射表建立了一个表驱动的QueryInterface实现。最后一层由CComObject或者其他类似的类&amp;#174;5提供，他们根据对象的生命周期和实体身份的要求提供QI、AddRef、Release的实现。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为了允许每个类都可以定义自己的生命周期和实体身份，每个类定义自己的_CreatorClass&amp;#174;6来定义适当的创建者。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR&gt;名词解释：&lt;BR&gt;&amp;#174;1、指Increment、Decrement两个函数的定义。&lt;BR&gt;&amp;#174;2、指CComXXXThreadModel定义中的几个typedef。&lt;BR&gt;&amp;#174;3、指从CComObjectRootEx和任意数量的接口派生，并且提供接口成员函数的实现（不包括IUnknown的几个虚函数实现）的类。&lt;BR&gt;&amp;#174;4、类似这样：&lt;BR&gt;BEGIN_COM_MAP(Cxx)&lt;BR&gt;&amp;nbsp;COM_INTERFACE_ENTRY(Ixx)&lt;BR&gt;END_COM_MAP()&lt;BR&gt;这几个宏建立了接口映射表。&lt;BR&gt;&amp;#174;5、这些类主要根据生命周期和实体身份提供IUnknown接口的虚函数。&lt;BR&gt;&amp;#174;6、我们的类从一个CComCoClass派生，在CComCoClass类中，typedef了创建者的类型定义。如DECLARE_AGGREGATABLE(T)&lt;img src ="http://blog.vckbase.com/howto/aggbug/19881.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>莫问春秋</dc:creator><title>COM问答录 </title><link>http://blog.vckbase.com/howto/archive/2006/02/08/17582.html</link><pubDate>Wed, 08 Feb 2006 09:29:00 GMT</pubDate><guid>http://blog.vckbase.com/howto/archive/2006/02/08/17582.html</guid><wfw:comment>http://blog.vckbase.com/howto/comments/17582.html</wfw:comment><comments>http://blog.vckbase.com/howto/archive/2006/02/08/17582.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/howto/comments/commentRss/17582.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/howto/services/trackbacks/17582.html</trackback:ping><description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;Q&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：什么是&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;com&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;？&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;A&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;com&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是指组件对象模型，是关于如何创建组件和如何通过组件建构应用程序的一个规范。&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=宋体 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;Q&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：什么是&amp;#8220;客户&amp;#8221;？&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;A: &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;对于一个应用程序或者组件，如果他使用了其他组件，那么我们称这个应用程序或者组件为&amp;#8220;客户&amp;#8221;。&amp;#8220;客户&amp;#8221;通过其他接口与组件连接。对于用户来说，一个组件就是一个接口集。用户只能通过接口才能和组件打交道。&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=宋体 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;FONT size=2&gt;Ｑ：什么是接口？&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;Ａ：对于ｃｏｍ来说，接口是一个包含函数指针数组的内存结构。每一个数组元素包含的是一个由组件所实现的函数的地址。&lt;FONT color=#ff0000&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff"&gt;一个ｃｏｍ组件可以提供多个接口（称之为&amp;#8220;接口集&amp;#8221;），而每个接口则包含了一系列函数&lt;/FONT&gt;。每一个接口都有一个唯一的接口标示符（&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=宋体&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN lang=EN-US&gt;IID&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）。&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=宋体 size=2&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;Q:定义接口和实现接口分开的动机是什么？&lt;BR&gt;A:是把对象内部的工作细节（相对于客户而言）都隐藏起来，这样在客户代码不需要重新编译的条件下，实现接口类的内部的数据成员数目和顺序都可以改变。&lt;BR&gt;&lt;BR&gt;Q:COM接口层次上的&amp;#8220;多层继承&amp;#8221;和实现层次上的&amp;#8220;多层继承&amp;#8221;的概况？&lt;BR&gt;A：COM 是禁止多层接口继承的，一个原因是多层继承会使接口在二进制层次上无法保持&amp;#8220;编译器无关性&amp;#8221;。而在实现层次上，多层继承是存在的。&lt;BR&gt;&lt;BR&gt;Q:类型库（type library）的用途？&lt;BR&gt;A:类型库（符号化的idl）是一个二进制文件，他保存了能够识别COM接口的其他语言所映射的接口定义。从而使其他语言能够使用这些组件的接口。&lt;BR&gt;&lt;BR&gt;Q&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IUnknown&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;接口中&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;QueryInterface, AddRef, Release&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数的作用是？&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;Ａ：&lt;/SPAN&gt;&lt;FONT face=宋体&gt;&lt;SPAN lang=EN-US&gt;QueryInterface&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;用来决定组件是否支持某个特定的接口。&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;AddRef&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;和&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Release&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;用来控制接口的生命周期。若某个接口的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;vtbl&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的前&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;3&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;个函数不是这三个函数，那么这个接口不是一个&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;com&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;接口。&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=宋体 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;Q&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&amp;#8220;得知两个接口指针是不是指向同一对象的唯一方法是查询这两个接口的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IUknown&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;，然后比较结果？&amp;#8221;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这句话不明白&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;p&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;49 《COM 技术内幕》&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;A&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：这个&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IUknown&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;应该是指指向组件的指针。在&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;QueryInterface&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中确保它一定指向组建对象地址的开始处。&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=宋体 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;Q&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：什么是&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;CLSID?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;A: &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;除了用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GUID &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;来表示接口以外，还可以用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;GUID&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;来标示唯一的组件(COM 实现类）。叫做&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;CLSID&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;。&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=宋体 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;Q&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：在&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;com&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中经常看到某个对象同时使用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;-&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;〉和&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;操作符同时使用的情况，&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;why&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;？&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;A&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;c++&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中存在对操作符号的重载，所以可以重载&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;-&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;〉号，但是好像'.'号是不能重载的（有待考察）&lt;/SPAN&gt; &lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;！&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=宋体 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;A&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：什么是代理、残根&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;DLL&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;？&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;Q&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：一个代理就是同另一个组件行为相同的组件，代理必须是ＤＬＬ形式的。因为它必须访问客户进程的地址空间以便对传给接口函数的参数进行调整。残根ＤＬＬ对返回给客户的参数进行调整以及对客户传递来的参数进行反调整。&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;FONT face=宋体 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;A&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：什么是双重接口、调度接口？&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face=宋体&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;Q&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;：&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;IDispatch::Invoke&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数所实现的函数集被称作一个调度接口。双重接口也是一种度接口，它使得可以通过&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;invoke&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;调用的函数也能够通过&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;vtbl&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;访问。&lt;BR&gt;&lt;BR&gt;A:COM支持哪三种激活方式？&lt;BR&gt;Q:CoGetClassObject绑定到类厂的引用。CoCreateInstance绑定到新的类实例的引用。CoGetInstanceFromFile绑定到指向文件中永久实例的引用。&lt;BR&gt;&lt;BR&gt;A:什么是COM服务器？&lt;BR&gt;Q：创建一个或者几个COM类，需要把所有的类打包并安装到系统上，这个包称之为COM类。COM服务器的形式有：进程内、进程外、windows下的系统服务。COM服务器除容纳其类的实现外，还需要１）注册和注销服务器中所有的类和他本身２）向SCM提供类对象（类厂）３）管理服务器的生命周期&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/howto/aggbug/17582.html" width = "1" height = "1" /&gt;</description></item></channel></rss>