﻿<?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++博客-C++ Programmer's Cookbook-随笔分类-COM/ATL</title><link>http://www.cppblog.com/mzty/category/638.html</link><description>&lt;br/&gt;  
&lt;br/&gt;
&lt;a href = "http://www.cppblog.com/mzty/archive/2007/03/02/19109.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{C++ 基础}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/08/13/29922.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{C++ 高级}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/04/16/22064.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{C#界面，C++核心算法}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/03/04/19163.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{设计模式}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "
http://www.cppblog.com/mzty/archive/2007/03/04/19167.html"&gt;&lt;font size = 5 color ="#FF0000"&gt;{C#基础}&lt;font/&gt;&lt;/a&gt;





</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 18:52:14 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 18:52:14 GMT</pubDate><ttl>60</ttl><item><title>C#调用C++的COM</title><link>http://www.cppblog.com/mzty/archive/2007/06/04/25522.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Mon, 04 Jun 2007 14:44:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2007/06/04/25522.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/25522.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2007/06/04/25522.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/25522.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/25522.html</trackback:ping><description><![CDATA[C#调用C++的COM比较简单，看下面的简单实例。<br><br>一 建立ATL COM ，增加接口ITest和实现函数Test，增加以下函数：<br>idl文件：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_27_364_Open_Image onclick="this.style.display='none'; Codehighlighter1_27_364_Open_Text.style.display='none'; Codehighlighter1_27_364_Closed_Image.style.display='inline'; Codehighlighter1_27_364_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_27_364_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_364_Closed_Text.style.display='none'; Codehighlighter1_27_364_Open_Image.style.display='inline'; Codehighlighter1_27_364_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;ITest&nbsp;:&nbsp;IDispatch</span><span id=Codehighlighter1_27_364_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_27_364_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;[id(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),&nbsp;helpstring(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">method&nbsp;ADD</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)]&nbsp;HRESULT&nbsp;ADD([</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">]&nbsp;LONG&nbsp;x,&nbsp;[</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">]&nbsp;LONG&nbsp;y,&nbsp;LONG</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;z);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;[id(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">),&nbsp;helpstring(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">method&nbsp;UpperCase</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)]&nbsp;HRESULT&nbsp;UpperCase([</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">]&nbsp;CHAR&nbsp;A,&nbsp;CHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;B);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;[id(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">),&nbsp;helpstring(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">method&nbsp;LowerCase</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)]&nbsp;HRESULT&nbsp;LowerCase([</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">]&nbsp;BSTR&nbsp;A,&nbsp;BSTR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;B);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;[id(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">),&nbsp;helpstring(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">method&nbsp;Change</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)]&nbsp;HRESULT&nbsp;Change([</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">]&nbsp;VARIANT&nbsp;A,&nbsp;[</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">]&nbsp;VARIANT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;B);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
<br>ITest文件：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;MIDL_INTERFACE(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">52CA8A5C-593D-4E2E-B58F-BB6C6604EAF2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ITest&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;IDispatch<br><img id=Codehighlighter1_89_719_Open_Image onclick="this.style.display='none'; Codehighlighter1_89_719_Open_Text.style.display='none'; Codehighlighter1_89_719_Closed_Image.style.display='inline'; Codehighlighter1_89_719_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_89_719_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_719_Closed_Text.style.display='none'; Codehighlighter1_89_719_Open_Image.style.display='inline'; Codehighlighter1_89_719_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_89_719_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_89_719_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_119_140_Open_Image onclick="this.style.display='none'; Codehighlighter1_119_140_Open_Text.style.display='none'; Codehighlighter1_119_140_Closed_Image.style.display='inline'; Codehighlighter1_119_140_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_119_140_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_140_Closed_Text.style.display='none'; Codehighlighter1_119_140_Open_Image.style.display='inline'; Codehighlighter1_119_140_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_119_140_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_119_140_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[helpstring][id]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;HRESULT&nbsp;STDMETHODCALLTYPE&nbsp;ADD(&nbsp;<br><img id=Codehighlighter1_186_195_Open_Image style="DISPLAY: inline" onclick="this.style.display='none'; Codehighlighter1_186_195_Open_Text.style.display='none'; Codehighlighter1_186_195_Closed_Image.style.display='inline'; Codehighlighter1_186_195_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_186_195_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_186_195_Closed_Text.style.display='none'; Codehighlighter1_186_195_Open_Image.style.display='inline'; Codehighlighter1_186_195_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_186_195_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_186_195_Open_Text style="DISPLAY: inline"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[in]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;LONG&nbsp;x,<br><img id=Codehighlighter1_217_226_Open_Image onclick="this.style.display='none'; Codehighlighter1_217_226_Open_Text.style.display='none'; Codehighlighter1_217_226_Closed_Image.style.display='inline'; Codehighlighter1_217_226_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_217_226_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_217_226_Closed_Text.style.display='none'; Codehighlighter1_217_226_Open_Image.style.display='inline'; Codehighlighter1_217_226_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_217_226_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_217_226_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[in]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;LONG&nbsp;y,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LONG&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">z)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_287_308_Open_Image onclick="this.style.display='none'; Codehighlighter1_287_308_Open_Text.style.display='none'; Codehighlighter1_287_308_Closed_Image.style.display='inline'; Codehighlighter1_287_308_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_287_308_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_287_308_Closed_Text.style.display='none'; Codehighlighter1_287_308_Open_Image.style.display='inline'; Codehighlighter1_287_308_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_287_308_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_287_308_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[helpstring][id]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;HRESULT&nbsp;STDMETHODCALLTYPE&nbsp;UpperCase(&nbsp;<br><img id=Codehighlighter1_360_369_Open_Image onclick="this.style.display='none'; Codehighlighter1_360_369_Open_Text.style.display='none'; Codehighlighter1_360_369_Closed_Image.style.display='inline'; Codehighlighter1_360_369_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_360_369_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_360_369_Closed_Text.style.display='none'; Codehighlighter1_360_369_Open_Image.style.display='inline'; Codehighlighter1_360_369_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_360_369_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_360_369_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[in]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;CHAR&nbsp;A,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHAR&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">B)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_430_451_Open_Image onclick="this.style.display='none'; Codehighlighter1_430_451_Open_Text.style.display='none'; Codehighlighter1_430_451_Closed_Image.style.display='inline'; Codehighlighter1_430_451_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_430_451_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_430_451_Closed_Text.style.display='none'; Codehighlighter1_430_451_Open_Image.style.display='inline'; Codehighlighter1_430_451_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_430_451_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_430_451_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[helpstring][id]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;HRESULT&nbsp;STDMETHODCALLTYPE&nbsp;LowerCase(&nbsp;<br><img id=Codehighlighter1_503_512_Open_Image onclick="this.style.display='none'; Codehighlighter1_503_512_Open_Text.style.display='none'; Codehighlighter1_503_512_Closed_Image.style.display='inline'; Codehighlighter1_503_512_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_503_512_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_503_512_Closed_Text.style.display='none'; Codehighlighter1_503_512_Open_Image.style.display='inline'; Codehighlighter1_503_512_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_503_512_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_503_512_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[in]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;BSTR&nbsp;A,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BSTR&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">B)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_573_594_Open_Image onclick="this.style.display='none'; Codehighlighter1_573_594_Open_Text.style.display='none'; Codehighlighter1_573_594_Closed_Image.style.display='inline'; Codehighlighter1_573_594_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_573_594_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_573_594_Closed_Text.style.display='none'; Codehighlighter1_573_594_Open_Image.style.display='inline'; Codehighlighter1_573_594_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_573_594_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_573_594_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[helpstring][id]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;HRESULT&nbsp;STDMETHODCALLTYPE&nbsp;Change(&nbsp;<br><img id=Codehighlighter1_643_652_Open_Image onclick="this.style.display='none'; Codehighlighter1_643_652_Open_Text.style.display='none'; Codehighlighter1_643_652_Closed_Image.style.display='inline'; Codehighlighter1_643_652_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_643_652_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_643_652_Closed_Text.style.display='none'; Codehighlighter1_643_652_Open_Image.style.display='inline'; Codehighlighter1_643_652_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_643_652_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_643_652_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[in]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;VARIANT&nbsp;A,<br><img id=Codehighlighter1_677_687_Open_Image onclick="this.style.display='none'; Codehighlighter1_677_687_Open_Text.style.display='none'; Codehighlighter1_677_687_Closed_Image.style.display='inline'; Codehighlighter1_677_687_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_677_687_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_677_687_Closed_Text.style.display='none'; Codehighlighter1_677_687_Open_Image.style.display='inline'; Codehighlighter1_677_687_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_677_687_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_677_687_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;[out]&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;VARIANT&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">B)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;</span></div>
<p><br>在Test中实现以上接口函数。<br><br>二 在C#中的使用方法<br><br>1）使用IDE中的reference来reference com，这个之前com必须先注册：<br><img src="http://www.cppblog.com/images/cppblog_com/mzty/2021/o_com%20reference.jpg" border=0><br><br>2）使用命令TLBIMP ATLCOM.tlb /out:C:\ATLCOM.dll ,然后referece生成的DLL（tblmp命令帮你注册com）。<br><br>3）<a onclick="javascript:Track('ctl00_LibFrame_ctl04|ctl00_LibFrame_ctl09',this);" href="http://msdn2.microsoft.com/zh-cn/library/system.runtime.interopservices.typelibconverter(VS.80).aspx"><u><font color=#0000ff>TypeLibConverter</font></u></a> 类 <br><strong>TypeLibConverter</strong> 类（位于 <a onclick="javascript:Track('ctl00_LibFrame_ctl04|ctl00_LibFrame_ctl10',this);" href="http://msdn2.microsoft.com/zh-cn/library/system.runtime.interopservices(VS.80).aspx"><u><font color=#0000ff>System.Runtime.InteropServices</font></u></a> 命名空间中）提供了将类型库中的 coclass 和接口转换为程序集中的元数据的方法。此 API 将生成与 Tlbimp.exe 相同的元数据输出。不过，与 Tlbimp.exe 不同的是，<strong>TypeLibConverter</strong> 类可以将内存中的类型库转换为元数据。<br><br>&nbsp;4）自定义包装 <br>当类型库不可用或不正确时，一种可选的做法是在托管源代码中创建类或接口的重复定义。然后，用面向运行库的编译器来编译源代码以生成程序集中的元数据。 <br>要手动定义 COM 类型，必须具备下列各项： </p>
<p>所定义的 coclass 和接口的精确描述。<br>可生成正确 .NET Framework 类定义的编译器，如 C# 编译器。<br>有关类型库到程序集转换规则的知识。</p>
<p>编写自定义包装是一种较少使用的高级技术。有关生成自定义包装的其他信息，请参见<a onclick="javascript:Track('ctl00_LibFrame_ctl04|ctl00_LibFrame_ctl11',this);" href="http://msdn2.microsoft.com/zh-cn/library/h7hx9abd(VS.80).aspx"><u><font color=#0000ff>自定义标准包装</font></u></a>。<br><br>三 在C#的client调用COM提供的接口，我们可以看到在C#中COM的接口和函数被变换为如下：<br>Member of atlcom.TestClass：<br>public TestClass();&nbsp;&nbsp;&nbsp; <br>public virtual void ADD(int x, int y, ref int z);<br>public virtual void UpperCase(sbyte A, ref sbyte B);<br>public virtual void Change(object A, out object B) ;&nbsp;&nbsp; <br>public virtual void LowerCase(string A, ref string B);<br><br>四 更多可以参考：<a href="http://www.codeproject.com/dotnet/cominterop.asp">http://www.codeproject.com/dotnet/cominterop.asp</a><br><br><br><br><br></p>
<img src ="http://www.cppblog.com/mzty/aggbug/25522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2007-06-04 22:44 <a href="http://www.cppblog.com/mzty/archive/2007/06/04/25522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OLE/COM/COM+/DCOM/ActiveX/ActiveX contorl ( 概念)</title><link>http://www.cppblog.com/mzty/archive/2005/12/29/2242.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Thu, 29 Dec 2005 07:51:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2005/12/29/2242.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2242.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2005/12/29/2242.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2242.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2242.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>What is OLE?<br>OLE (Object Linking and Embedding) is Microsoft's component document technology. With OLE, it is possible to dynamically link files and applications together. An object is a combination of data and the application needed to modify that data. Objects can be embedded in or linked to documents created with a different application.</p>
<p>For instance, an Excel spreadsheet can be embedded within a Microsoft Word document using OLE. Double-clicking the embedded spreadsheet will launch Excel and allow the user to modify the sheet.</p>
<p>Some applications include small applets that are used to create objects. For instance, Microsoft Word includes a drawing tool (MS Draw) and a tool for manipulating characters as art (Text Art) which can be launched only via OLE.</p>
<p>For more information, visit Microsoft's Developer Network page at: <a href="http://msdn.microsoft.com/default.aspx">http://msdn.microsoft.com/default.aspx</a></p>
<p>&nbsp;</p>
<p>What are COM, COM+, and DCOM?<br>COM (Component Object Model) is Microsoft's component software architecture developed primarily for Windows. It is the foundation upon which OLE and ActiveX are based, and provides a means to re-use code without requiring re-compilation. In COM, a component is a platform-specific binary file that compliant applications and other components can utilize. Programs incorporating a component's services never have access to its internal data structure, but instead include pointers to its standardized interface. Thus, it is possible for components to interact with each other regardless of how they work or what language they are written in. </p>
<p>COM+ is an enhanced version of COM that provides better security and improved performance. DCOM (Distributed Component Object Model) is an extension of COM that allows applications and components to communicate with each other over a network. </p>
<p>For more detailed information about COM, COM+, DCOM, and related technologies, visit: <a href="http://www.microsoft.com/com/default.mspx">http://www.microsoft.com/com/default.mspx</a></p>
<p>&nbsp;</p>
<p>What is ActiveX? <br>ActiveX is a term Microsoft uses to describe a number of its COM technologies. However, when most people say "ActiveX", they are really referring to ActiveX controls, Microsoft's answer to Java applets. The two technologies are similar in that they are designed to be downloaded and executed by web browsers. The difference is that while ActiveX controls can interface with Microsoft Windows better than Java can, they offer very little cross-platform support. </p>
<p>For more information about ActiveX controls as well as other ActiveX technologies, visit Microsoft's page at: <a href="http://www.microsoft.com/com/default.mspx">http://www.microsoft.com/com/default.mspx</a> CNET maintains a library of ActiveX controls, available at the following address: <a href="http://www.download.com/2001-2206-0.html?legacy=cnet">http://www.download.com/2001-2206-0.html?legacy=cnet</a></p>
<p>&nbsp;</p>
<p>What are ActiveX controls? <br>ActiveX controls are small program building blocks that can be used to create distributed applications that work over the Internet through web browsers. Examples include customized applications for gathering data, viewing certain kinds of files, and displaying animation. </p>
<p>The ActiveX programming specification is an extension of Microsoft Windows and the Object Linking and Embedding (OLE) API. ActiveX applications are used mainly with Microsoft's Internet Explorer web browser. </p>
<p>Like Java applets, programs that use ActiveX controls run on the client computer, not the server. </p>
<p>For more information about ActiveX controls as well as other ActiveX technologies, visit Microsoft's page at: <a href="http://www.microsoft.com/com/default.mspx">http://www.microsoft.com/com/default.mspx</a> </p>
<p><br>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br>A software architecture developed by Microsoft to build component-based applications. COM objects are discrete components, each with a unique identity, which expose interfaces that allow applications and other components to access their features. COM objects are more versatile than Win32 DLLs because they are completely language-independent, have built-in interprocess communications capability, and easily fit into an object-oriented program design. COM was first released in 1993 with OLE2, largely to replace the interprocess communication mechanism DDE used by the initial release of OLE. ActiveX also is based on COM. <br></p><img src ="http://www.cppblog.com/mzty/aggbug/2242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2005-12-29 15:51 <a href="http://www.cppblog.com/mzty/archive/2005/12/29/2242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++中使用com的方法</title><link>http://www.cppblog.com/mzty/archive/2005/12/24/2049.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Sat, 24 Dec 2005 06:53:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2005/12/24/2049.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2049.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2005/12/24/2049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2049.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2049.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 简单模拟：										#include 				"				ClassDll.h				"																#include 				"				ClassDll_i.c				"																																																if				 ( ...&nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2005/12/24/2049.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2005-12-24 14:53 <a href="http://www.cppblog.com/mzty/archive/2005/12/24/2049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COM编程入门(2)</title><link>http://www.cppblog.com/mzty/archive/2005/12/23/2004.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Fri, 23 Dec 2005 05:09:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2005/12/23/2004.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2004.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2005/12/23/2004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2004.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2004.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2005/12/23/2004.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2005-12-23 13:09 <a href="http://www.cppblog.com/mzty/archive/2005/12/23/2004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COM编程入门(1)</title><link>http://www.cppblog.com/mzty/archive/2005/12/23/2003.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Fri, 23 Dec 2005 05:08:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2005/12/23/2003.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2003.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2005/12/23/2003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2003.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2003.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2005/12/23/2003.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2005-12-23 13:08 <a href="http://www.cppblog.com/mzty/archive/2005/12/23/2003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用VC进行COM编程所必须掌握的理论知识</title><link>http://www.cppblog.com/mzty/archive/2005/12/23/2002.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Fri, 23 Dec 2005 05:01:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2005/12/23/2002.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2002.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2005/12/23/2002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2002.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2002.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2005/12/23/2002.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2005-12-23 13:01 <a href="http://www.cppblog.com/mzty/archive/2005/12/23/2002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>com中的字符串</title><link>http://www.cppblog.com/mzty/archive/2005/12/23/2001.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Fri, 23 Dec 2005 04:57:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2005/12/23/2001.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2001.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2005/12/23/2001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2001.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2001.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2005/12/23/2001.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2005-12-23 12:57 <a href="http://www.cppblog.com/mzty/archive/2005/12/23/2001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual C++.NET中 字符串转换方法</title><link>http://www.cppblog.com/mzty/archive/2005/12/23/2000.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Fri, 23 Dec 2005 04:52:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2005/12/23/2000.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/2000.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2005/12/23/2000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/2000.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/2000.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/mzty/archive/2005/12/23/2000.html'>阅读全文</a><img src ="http://www.cppblog.com/mzty/aggbug/2000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2005-12-23 12:52 <a href="http://www.cppblog.com/mzty/archive/2005/12/23/2000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>