﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><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>C++博客-溪流漫话-随笔分类-COM</title><link>http://www.cppblog.com/Streamlet/category/19861.html</link><description>荒废中，求警醒~</description><language>zh-cn</language><lastBuildDate>Wed, 14 Jan 2015 20:52:55 GMT</lastBuildDate><pubDate>Wed, 14 Jan 2015 20:52:55 GMT</pubDate><ttl>60</ttl><item><title>裸写一个进程外 COM 组件</title><link>http://www.cppblog.com/Streamlet/archive/2012/12/02/195900.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Sun, 02 Dec 2012 11:56:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/12/02/195900.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/195900.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/12/02/195900.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/195900.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/195900.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引言 前面九月份的八篇关于COM的文章，说的都是进程内COM。那时，我们从一个含内嵌IE控件的窗口说起，根据COM协议手工书写了进程内COM组件，并由此积累了一些类似ATL的框架性代码。 &nbsp; 今天开始，我们把脚步迈向进程外组件。同样是从最基础的开始，本篇我们将根据进程外COM组件的加载规范手工编写一个EXE，然后用标准的COM调用方法来使用它。之前积累的框架性代码不属于第三方库，所以这里...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/12/02/195900.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/195900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-12-02 19:56 <a href="http://www.cppblog.com/Streamlet/archive/2012/12/02/195900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让 COM 脱离注册表</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/21/191436.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Thu, 20 Sep 2012 16:34:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/21/191436.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/191436.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/21/191436.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/191436.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/191436.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引言 在上一篇《在 DLL 中加入第二个 COM 类》的“单用户注册”一节中，我们曾提到脱离注册表依赖一事，现在我们来把这事儿给办了。 &nbsp; 注册 我们在之前支持了“regsvr32 /n /i:user COMProvider.dll”这一注册命令。这一注册命令给了我们一定的扩展余地。从ATL默认的代码来看，对于DllInstall，目前已定义的命令行参数似乎只有user，于是我们可以定...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/21/191436.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/191436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-21 00:34 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/21/191436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在 DLL 中加入第二个 COM 类</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/12/190331.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Tue, 11 Sep 2012 16:23:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/12/190331.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/190331.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/12/190331.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/190331.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/190331.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引言 在前面几篇文章里，我们已经成功脱离ATL写了一个COM组件，并且实现了自动化。今天，我们来加入第二个类，并且为加入第二个类做一些整理工作。 &nbsp; 为DLL建立一个Module类 在前面，我们为了使得DllCanUnloadNow能正确工作而放了一个全局变量LONG g_nModuleCount，并且在SampleClass的构造函数和析构函数里对它进行自增和自减。另外还有个IType...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/12/190331.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/190331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-12 00:23 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/12/190331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让COM组件可被跨语言调用</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/09/190026.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Sun, 09 Sep 2012 04:43:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/09/190026.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/190026.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/09/190026.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/190026.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/190026.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 错误修正 首先修正一下上篇（《裸写一个进程内 COM 组件》）中的例子的一个小问题。类厂的CreateInstance里面，上次是这么写的： &nbsp;     STDMETHODIMP ClassFactory::CreateInstance(_In_opt_ IUnknown *pUnkOuter, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/09/190026.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/190026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-09 12:43 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/09/190026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>裸写一个进程内 COM 组件</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/07/189762.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Thu, 06 Sep 2012 16:23:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/07/189762.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/189762.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/07/189762.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/189762.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/189762.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引言 前几天山寨了ATL的COM_INTERFACE，了解了一个COM类的如何进行通用的组织。今天再来学习下COM协议，看看如何实现一个COM组件——当然，也是不能用ATL的，不然就学不到什么了。 &nbsp; COM DLL说简单简单，说复杂也很复杂。说简单呢，其实貌似只要导出下面这五个函数就可以了： DllCanUnloadNow DllGetClassObject DllRegisterSe...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/07/189762.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/189762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-07 00:23 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/07/189762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写个含 Windows Media Player 的窗口</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/04/189470.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Tue, 04 Sep 2012 14:16:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/04/189470.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/189470.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/04/189470.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/189470.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/189470.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在上一篇中，我们实现了COM_INTERFACE宏，并且重新写了一个含有WebBrowser的窗口。在那里我们留了中间层OleContainer。为了验证OleContainer的可用性，现在来写一个含有Windows Media Player（下文简称“WMP”）控件的窗口。 &nbsp; WMP控件的容器类除了IOleClientSite、IOleInPlaceSite、IOleInPlace...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/04/189470.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/189470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-04 22:16 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/04/189470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>山寨一下 ATL 的 COM_INTERFACE</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/03/189321.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Mon, 03 Sep 2012 15:17:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/03/189321.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/189321.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/03/189321.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/189321.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/189321.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; 上一篇我们简单学习了下ATL 的继承链处理。可是，如果要裸写一个含内嵌IE控件的窗口，还是要写一个很长的QueryInterface，以及AddRef和Release，确保引用计数的正确性。于是我们不得不参考ATL的COM_TNTERFACE的处理技巧，来达到一定程度上的易用性。 &nbsp; 首先，除了IUnknown以外，其余所有涉及到的接口，均按上一篇的形式，弄成相应的IXXX...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/03/189321.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/189321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-03 23:17 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/03/189321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习下 ATL 的继承链处理</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/02/189135.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Sun, 02 Sep 2012 05:56:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/02/189135.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/189135.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/02/189135.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/189135.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/189135.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们先来看一组接口定义： &nbsp;     struct IX { &nbsp;&nbsp;&nbsp; virtual void MethodX() = 0; }; &nbsp; struct IXA : public IX { &nbsp;&nbsp;&nbsp; virtual void MethodXA() = 0; }; &nbsp; struct IXB : public IX {...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/02/189135.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/189135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-02 13:56 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/02/189135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>裸写一个含内嵌IE控件的窗口</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Fri, 31 Aug 2012 17:04:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/188962.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/188962.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/188962.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引言  &nbsp; 之前也做过一些含内嵌IE控件的东西，只是一直用MFC/ATL等框架，对于里面的原理其实一知半解，只有脱离它们写一遍，才算能真正懂。前不久在写一个SkyDriveClient的时候正好有一个需求，就练习了一下。技术含量没有，在此记录一笔，供后来人入门，供前辈们批评。 &nbsp; 本文中，行文以流水帐、贴代码方式为主，同时为了不带来干扰，代码将尽量以不带或少带封装的方式书写。目...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/188962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-01 01:04 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>裸写一个含内嵌IE控件的窗口</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Fri, 31 Aug 2012 17:04:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/188962.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/188962.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/188962.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引言  &nbsp; 之前也做过一些含内嵌IE控件的东西，只是一直用MFC/ATL等框架，对于里面的原理其实一知半解，只有脱离它们写一遍，才算能真正懂。前不久在写一个SkyDriveClient的时候正好有一个需求，就练习了一下。技术含量没有，在此记录一笔，供后来人入门，供前辈们批评。 &nbsp; 本文中，行文以流水帐、贴代码方式为主，同时为了不带来干扰，代码将尽量以不带或少带封装的方式书写。目...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/188962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-01 01:04 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>裸写一个含内嵌IE控件的窗口</title><link>http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Fri, 31 Aug 2012 17:04:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/188962.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/188962.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/188962.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引言  &nbsp; 之前也做过一些含内嵌IE控件的东西，只是一直用MFC/ATL等框架，对于里面的原理其实一知半解，只有脱离它们写一遍，才算能真正懂。前不久在写一个SkyDriveClient的时候正好有一个需求，就练习了一下。技术含量没有，在此记录一笔，供后来人入门，供前辈们批评。 &nbsp; 本文中，行文以流水帐、贴代码方式为主，同时为了不带来干扰，代码将尽量以不带或少带封装的方式书写。目...&nbsp;&nbsp;<a href='http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html'>阅读全文</a><img src ="http://www.cppblog.com/Streamlet/aggbug/188962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2012-09-01 01:04 <a href="http://www.cppblog.com/Streamlet/archive/2012/09/01/188962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CoInitialize 和 CoUninitialize 的调用时机问题</title><link>http://www.cppblog.com/Streamlet/archive/2010/04/02/111363.html</link><dc:creator>溪流</dc:creator><author>溪流</author><pubDate>Fri, 02 Apr 2010 02:02:00 GMT</pubDate><guid>http://www.cppblog.com/Streamlet/archive/2010/04/02/111363.html</guid><wfw:comment>http://www.cppblog.com/Streamlet/comments/111363.html</wfw:comment><comments>http://www.cppblog.com/Streamlet/archive/2010/04/02/111363.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cppblog.com/Streamlet/comments/commentRss/111363.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Streamlet/services/trackbacks/111363.html</trackback:ping><description><![CDATA[<p>最近有个东西，需要读 XML 配置文件，于是用 msxml 做了。msxml 是基于 COM 的，使用之前需要 CoInitialize，使用之后需要 CoUninitialize。于是我写成了：</p> <p>void foo()<br>{<br>&nbsp;&nbsp;&nbsp; CoInitialize(NULL); <br><br>&nbsp;&nbsp;&nbsp; // Reading configuration <br><br>&nbsp;&nbsp;&nbsp; CoUninitialize();<br>}  <p>刚才我正乐此不彼的把类似这样的东西改成：  <p>void foo()<br>{<br>&nbsp;&nbsp;&nbsp; CoInitialize(NULL);<br>&nbsp;&nbsp;&nbsp; LOKI_ON_BLOCK_EXIT(CoUninitialize); <br><br>&nbsp;&nbsp;&nbsp; // Reading configuration<br>}  <p>前面的同事过来看到了，说，你不该在这里调用 CoInitialize 和 CoUninitialize。如果有的地方也在用 COM，你这里 CoUninitialize 一下，别的地方就会出错了，上次的某个 Bug 就是。  <p>我狡辩道：我假定这里没有多线程环境（实际上也是），并且约定别的地方用 COM 的时候调用 CoInitialize 时不要判断返回值。  <p>同事：应该和大众习惯保持一致，最好就是全项目最开始的时候 CoInitialize 一次，结束的时候 CoUninitialize 一次。  <p>我：我这里是较底层功能函数。  <p>同事：可以以文档的方式注明，使用该模块前必须自己 CoInitialize，使用完毕后自己 CoUninitialize。  <p>我：我只是想要用起来方便一点，用的时候不要有那么多先决条件和后置条件。再说，人家本来可以不知道我用了 COM，我这么一说明，就暴露了内部信息了不是？  <p>其实我被动摇了。  <p>各位大大，你们怎么处理呢？</p> <p><font color="#0000ff">------------------------------华丽的分割线（13:27 p.m. 增加）----------------------------------</font></p> <p><font color="#0000ff">好，既然 CoInitialize 和 CoUninitialize 有引用计数机制，那么这个具体问题已经解决。</font></p> <p><font color="#0000ff">那么，有没有类似的成对使用的 API，会对进程全局产生影响的呢？如果有，在底层要用到的时候该怎么处理？</font></p><img src ="http://www.cppblog.com/Streamlet/aggbug/111363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Streamlet/" target="_blank">溪流</a> 2010-04-02 10:02 <a href="http://www.cppblog.com/Streamlet/archive/2010/04/02/111363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>