﻿<?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++博客-只有面对现实，你才能超越现实-随笔分类-ATL</title><link>http://www.cppblog.com/wanghaiguang/category/19429.html</link><description>不要浪费你的生命，在你一定会后悔的地方上。
逆水行舟，不进则退</description><language>zh-cn</language><lastBuildDate>Sat, 16 Jun 2012 10:01:28 GMT</lastBuildDate><pubDate>Sat, 16 Jun 2012 10:01:28 GMT</pubDate><ttl>60</ttl><item><title>COM入门</title><link>http://www.cppblog.com/wanghaiguang/archive/2012/06/11/178412.html</link><dc:creator>whg</dc:creator><author>whg</author><pubDate>Mon, 11 Jun 2012 06:58:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2012/06/11/178412.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/178412.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2012/06/11/178412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/178412.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/178412.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文转自：http://www.vckbase.com/document/viewdoc/?id=212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本文的目的是为刚刚接触COM的程序员提供编程指南，并帮助他们理解COM的基本概念。内容包括COM规范简介，重要的COM术语以及如何重用现有的COM组件。本文不包括如何编写自己的COM对象和接口。　　COM即组件对象模型，是Compone...&nbsp;&nbsp;<a href='http://www.cppblog.com/wanghaiguang/archive/2012/06/11/178412.html'>阅读全文</a><img src ="http://www.cppblog.com/wanghaiguang/aggbug/178412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">whg</a> 2012-06-11 14:58 <a href="http://www.cppblog.com/wanghaiguang/archive/2012/06/11/178412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ATL入门：利用ATL编写简单的COM组件 （转）</title><link>http://www.cppblog.com/wanghaiguang/archive/2012/06/07/177911.html</link><dc:creator>whg</dc:creator><author>whg</author><pubDate>Thu, 07 Jun 2012 05:56:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2012/06/07/177911.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/177911.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2012/06/07/177911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/177911.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/177911.html</trackback:ping><description><![CDATA[使用ATL编写一个简单的COM服务器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本文的对象是COM编程初学者，其目的旨在描述如何用ATL创建COM服务器，以及如何在VC或VB编写的客户端应用程序中调用COM服务器。为了不给初学者增加负担，本文不打算深入讨论COM和IDL的细节，而是展示用ATL创建简单的COM对象所需要的步骤。希望通过这篇文章能刺激你学习COM编程的欲望。<br /><br />第一步：运行ATL COM向导<br />&nbsp;&nbsp;&nbsp; 你要做的第一件事情是启动VS2008创建一个新的工程。选择&#8220;File-&gt;New Project&#8221;。弹出创建工程对话框，选择"Visual C++-&gt;ATL-&gt;ATL Project"，在下面输入工程名称和路径,注意这个向导创建的工程并没有包含任何初始的COM对象，在完成这个向导之后，要从&#8220;ClassView&#8221;中用&#8220;New ATL Object&#8221;命令来指定你想要增加到这个工程中的对象类型。然后单击"OK"按钮。<br />&nbsp;&nbsp;&nbsp; 第一部分单选按钮选项是要创建的服务器类型&#8220;Server Type&#8221;。因为我们要创建一个进程内服务器（Server DLL），所以应该选择的类型是动态链接库&#8220;Dynamic Link Library&#8212;&#8212;DLL&#8221;，注意所有进程内服务器都是DLL。下面是三个复选框不用去管它，它和我们创建的这个工程没关系。单击&#8220;Finish&#8221;按钮。<br /><br />第二步：创建新的ATL对象<br />&nbsp;&nbsp;&nbsp;&nbsp; 为你的ATL项目（容器）添加供外部使用的Class (ATL Simple Object)。选项页 &#8220; C++&#8221;的&#8220;Short name&#8221;输入栏中输入你的Class名称，其它输入框会自动更新。<br />&nbsp;&nbsp;&nbsp; &#8220;Threading model&#8221;选&#8220;Apartment&#8221;;&#8220;Interface&#8221;选&#8220;Dual&#8221;;&#8220;Aggregation&#8221;选&#8220;No&#8221;;&#8220;Support&#8221;选&#8220;Connection points&#8221;和&#8220;I Object With Site(IE objects support)&#8221;。<br />&nbsp;&nbsp;&nbsp;&nbsp; 在&#8220;Short Name&#8221;文本编辑框中输入&#8220;First_ATL&#8221;。注意向导会自动填写其余的文本编辑框。单击&#8220;Attributes&#8221;标签。其中有几组单选按钮选项和几个复选框。第一组单选按钮是线程模型&#8220;Threading Model&#8221;，我们取缺省值&#8220;Apartment Model&#8221;。第二组单选按钮是接口&#8220;Interface&#8221;，单击&#8220;Dual&#8221;，也就是双接口。最后，第三组单选按钮是聚合&#8220;Aggregation&#8221;，因为我们不想涉及接口的聚合，所以在此选择&#8220;No&#8221;。至于底下的三个复选框，我们不用管它，单击OK按钮让向导创建新的&#8220;ATL Simple Object&#8221;<br /><br />第三步：添加方法<br />&nbsp;&nbsp; &nbsp;如果你单击工作间的&#8220;ClassView&#8221;标签，你会注意到向导在里面添加了一些内容。添加一个方法很容易，选中&#8220;IFirst_ATL&#8221;后单击右键并选择&#8220;Add Method&#8221;。<br />&nbsp;&nbsp; &nbsp;单击&#8220;Add Method&#8221;后，你会看到&#8220;Add Method to Interface&#8221;对话框。<br />&nbsp;&nbsp;&nbsp; 在&#8220;Return Type&#8221;编辑框中（已成灰色）这个方法的返回值已经缺省为 &#8220;HRESULT&#8221;。大多数情况下都应该是这个值类型。下一个编辑框是方法名&#8220;Method Name&#8221;，输入方法名&#8220;AddNumbers&#8221;。最后一个编辑框是要你输入希望使用的参数&#8220;Parameters&#8221;。由于我们打算将两个数字相加，然后返回相加结果，所以要使用三个参数。最后一个参数是一个指针。现在你不用去关心繁杂的接口定义语言IDL，只要在这个参数编辑框中输入如下内容：<br />[in] long Num1, [in] long Num2, [out] long *ReturnVal<br />它的意思是声明两个long类型输入[in]参数和一个指针返回值[out]（刚开始可能会不习惯这样怪怪的写法，但等你阅读了一两本关于COM的书之后，会慢慢接收它的）。单击OK按钮。展开所有&#8220;ClassView&#8221;的节点&#8220;+&#8221;号。从这个视图可以清楚地了解Simple_ATL各个类之间的层次关系。双击最上面&#8220;IFirst_ATL&#8221;（接口）节点下的&#8220;AddNumbers&#8221;（方法）节点，右边屏幕将会显示这个方法的实现代码。添加如下的代码： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span>&nbsp;<span style="color: #000000">STDMETHODIMP&nbsp;CFirst_ATL::AddNumbers(</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;Num1,&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;Num2,&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">ReturnVal)<br /></span><span style="color: #008080">2</span>&nbsp;<span style="color: #000000">{<br /></span><span style="color: #008080">3</span>&nbsp;<span style="color: #000000"></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;implementation&nbsp;code&nbsp;here</span><span style="color: #008000"><br /></span><span style="color: #008080">4</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">*</span><span style="color: #000000">ReturnVal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Num1&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Num2;<br /></span><span style="color: #008080">5</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;S_OK;<br /></span><span style="color: #008080">7</span>&nbsp;<span style="color: #000000">}&nbsp;</span></div>第四步：编译这个DLL&nbsp;<br />&nbsp; 不管你想不相信，到目前为止，我们用ATL所创建的COM服务器已经完全能运行！当然，还需要编译它才行。按下&#8220;F7&#8221;功能键，几秒钟之后，VC++便会完成编译并注册你所创建的DLL服务器。这样其它的应用程序就可以使用这个COM服务器了。试一试吧！<br /><br />第五步：用VC测试这个服务器<br />保存并关闭Simple_ATL工程，然后创建一个新的Win32 控制台应用程序。选择&#8220;Win32 Console Application&#8221;并取名为&#8220;Test_ATL&#8221;。单击OK按钮并接受对话框中的缺省设置（空的工程）。单击&#8220;Finish&#8221;按钮，然后再按OK按钮。这样就创建好了一个空的工程。按下&#8220;Control+N&#8221;键向工程中添加一个文件。从弹出的窗口中选择&#8220;C++ Source File&#8221;并为它取名为&#8220;Test_ATL.cpp&#8221;。按下OK按钮。这样工程中就有了一个空的.CPP文件。我们要在这个文件中添加一些测试COM服务器的代码：<br />// 将头文件的目录指到Simple_ATL工程所在的目录<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">..\..\Simple_ATL\Simple_ATL\Simple_ATL_i.h</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">..\..\Simple_ATL\Simple_ATL\Simple_ATL_i.c</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;从Simple_ATL&nbsp;工程所在目录的Simple_ATL_i.c&nbsp;文件中拷贝以下内容&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #008000"></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;注意:&nbsp;你也可以不拷贝这些东西，而是把文件Simple_ATL_i.c包含进来。&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #008000"></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;我之所以将它拷进来，是想更清楚地展示这些敞亮来自什么地方一击它们的代码&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #008000"></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;const&nbsp;IID&nbsp;IID_IFirst_ATL&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #008000"></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;{0x5AC2B2B7,0xBA06,0x4A4E,0x8D,0xED,0x78,0xDD,0x95,0x73,0x25,0x3B};&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #008000"></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #008000"></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;const&nbsp;CLSID&nbsp;CLSID_First_ATL&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #008000"></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;{0x862DFA11,0x863B,0x4115,0xB7,0x39,0xB6,0x18,0x0E,0xBC,0x6B,0x66};&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">void</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;声明HRESULT和Simple_ATL接口指针&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HRESULT&nbsp;&nbsp;hr;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;IFirst_ATL&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">IFirstATL&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;初始化COM&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CoInitialize(</span><span style="color: #000000">0</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;使用SUCCEEDED&nbsp;宏并检查我们是否能得到一个接口指针&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(SUCCEEDED(hr))&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CoCreateInstance(&nbsp;CLSID_First_ATL,&nbsp;NULL,&nbsp;CLSCTX_INPROC_SERVER,&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IID_IFirst_ATL,&nbsp;(</span><span style="color: #0000ff">void</span><span style="color: #000000">**</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">IFirstATL);&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;如果成功，则调用AddNumbers方法，否则显示相应的出错信息&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(SUCCEEDED(hr))&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;ReturnValue;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFirstATL</span><span style="color: #000000">-&gt;</span><span style="color: #000000">AddNumbers(</span><span style="color: #000000">5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">7</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">ReturnValue);&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;answer&nbsp;for&nbsp;5&nbsp;+&nbsp;7&nbsp;is:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;ReturnValue&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFirstATL</span><span style="color: #000000">-&gt;</span><span style="color: #000000">Release();&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">CoCreateInstance&nbsp;Failed.</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;endl;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;释放COM&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CoUninitialize();&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">}&nbsp;&nbsp;</span></div>第七步：编译并运行测试程序<br />&nbsp;&nbsp; 按下&#8220;F5&#8221;功能键，编译测试程序，然后按&#8220;Control+F5&#8221;功能组合键运行测试程序。在DOS窗口中，你应该能看到输出的结果。<br /><br />本文转自：<a href="http://andylin02.iteye.com/blog/453079">http://andylin02.iteye.com/blog/453079</a>。<img src ="http://www.cppblog.com/wanghaiguang/aggbug/177911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">whg</a> 2012-06-07 13:56 <a href="http://www.cppblog.com/wanghaiguang/archive/2012/06/07/177911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>