﻿<?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++博客-ice197983-文章分类-ATL</title><link>http://www.cppblog.com/ice197983/category/1105.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 03:29:40 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 03:29:40 GMT</pubDate><ttl>60</ttl><item><title>动手添加代码实现lib的应用</title><link>http://www.cppblog.com/ice197983/articles/4202.html</link><dc:creator>黑色幽灵</dc:creator><author>黑色幽灵</author><pubDate>Wed, 15 Mar 2006 08:48:00 GMT</pubDate><guid>http://www.cppblog.com/ice197983/articles/4202.html</guid><wfw:comment>http://www.cppblog.com/ice197983/comments/4202.html</wfw:comment><comments>http://www.cppblog.com/ice197983/articles/4202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ice197983/comments/commentRss/4202.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ice197983/services/trackbacks/4202.html</trackback:ping><description><![CDATA[
		<font size="4">
				<font color="#ff1493">
						<font size="6">1 .</font>
						<font size="5">
								<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">
										<font color="#ff1493" size="5">在</font>
								</span>
								<font face="Times New Roman">
										<font size="5">
												<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial">
														<font color="#ff1493">
														</font>
														<font size="5">
																<font color="#ff1493">StdAfx.h</font>
														</font>
												</span>
										</font>
										<font size="5">
												<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">文件中加入代码</span>
										</font>
										<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial">:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span>
								</font>
						</font>
				</font>
		</font>
		<p style="LINE-HEIGHT: 150%">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial">
						<font size="4">#import  "..\MyProj\MyProj.tlb"<o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 150%">
				<font size="4">
				</font>
				<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">
				</span>
		</p>
		<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">
				<font size="4">
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</font>
				<font size="4">
						<span style="COLOR: #000000">最后的StdAfx.h文件如下：<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #008000">//</span>
				</font>
				<font size="4">
						<span style="COLOR: #008000"> stdafx.h : include file for standard system include files,<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #008000">//</span>
				</font>
				<font size="4">
						<span style="COLOR: #008000">  or project specific include files that are used frequently, but<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #008000">//</span>
				</font>
				<span style="COLOR: #008000">
						<font size="4">      are changed infrequently<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></font>
				</span>
				<span style="COLOR: #008000">
						<font size="4">//<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></font>
				</span>
				<span style="COLOR: #000000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #0000ff">#if</span>
						<span style="COLOR: #000000"> !defined(AFX_STDAFX_H__2B646017_28AD_4CDE_9792_CB8F9A5C6B39__INCLUDED_)</span>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #0000ff">#define</span>
						<span style="COLOR: #000000"> AFX_STDAFX_H__2B646017_28AD_4CDE_9792_CB8F9A5C6B39__INCLUDED_</span>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #0000ff">#if</span>
						<span style="COLOR: #000000"> _MSC_VER &gt; 1000</span>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#pragma once<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></font>
				</span>
				<font size="4">
						<span style="COLOR: #0000ff">#endif</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> _MSC_VER &gt; 1000</span>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #0000ff">#define</span>
						<span style="COLOR: #000000"> VC_EXTRALEAN  </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> Exclude rarely-used stuff from Windows headers</span>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </font>
				</span>
				<font size="4">
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">afxwin.h</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">         </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> MFC core and standard components</span>
				</font>
				<span style="COLOR: #008000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #000000">#include </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">afxext.h</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">         </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> MFC extensions</span>
				</font>
				<span style="COLOR: #008000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #000000">#include </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">afxdisp.h</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">        </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> MFC Automation classes</span>
				</font>
				<span style="COLOR: #008000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #000000">#include </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">afxdtctl.h</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">  </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> MFC support for Internet Explorer 4 Common Controls</span>
				</font>
				<span style="COLOR: #008000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #000000">#ifndef _AFX_NO_AFXCMN_SUPPORT<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">afxcmn.h</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">   </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> MFC support for Windows Common Controls</span>
				</font>
				<span style="COLOR: #008000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #0000ff">#endif</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> _AFX_NO_AFXCMN_SUPPORT</span>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<font color="#7fffd4">
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								</font>
								<font color="#ff1493">#import  </font>
						</font>
				</span>
				<font color="#ff1493">
						<font size="4">
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">..\MyProj\MyProj.tlb</span>
								<span style="COLOR: #000000">"</span>
						</font>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<span style="COLOR: #008000">
						<font size="4">//</font>
				</span>
				<font size="4">
						<span style="COLOR: #008000">{{AFX_INSERT_LOCATION}}<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> Microsoft Visual C++ will insert additional declarations immediately before the previous line.</span>
				</font>
				<span style="COLOR: #008000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<span style="COLOR: #000000">
						<br />
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #0000ff">#endif</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> !defined(AFX_STDAFX_H__2B646017_28AD_4CDE_9792_CB8F9A5C6B39__INCLUDED_)</span>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
		</div>
		<font size="4">
				<font color="#333333">编译<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial"> StdAfx.cpp</span></font>
				<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">，</span>
		</font>
		<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial">
				<br />
		</span>
		<font size="4">
				<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">这样在客户端的</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial">debug</span>
				<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">目录下生成组件的类型库头文件</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial">(.tlh)</span>
				<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">和类型库实现文件</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial">(.tli)</span>
		</font>
		<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">
				<font size="4">。<br /><br /><font size="5"><font color="#ff1493">2. 在调用Dll类的头文件中加入</font><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial"><font color="#ff1493">using namespace MYPROJLib;<o:p></o:p></font></span></font><br /></font>
				<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">
						<font size="4">
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								<span style="COLOR: #008000">//</span>
						</font>
						<span style="COLOR: #008000">
								<font size="4"> MyExeDlg.cpp : implementation file<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></font>
						</span>
						<span style="COLOR: #008000">
								<font size="4">//<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></font>
						</span>
						<span style="COLOR: #000000">
								<br />
								<font size="4">
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </font>
						</span>
						<font size="4">
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">stdafx.h</span>
								<span style="COLOR: #000000">"</span>
						</font>
						<span style="COLOR: #000000">
								<br />
								<font size="4">
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </font>
						</span>
						<font size="4">
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">MyExe.h</span>
								<span style="COLOR: #000000">"</span>
						</font>
						<span style="COLOR: #000000">
								<br />
								<font size="4">
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </font>
						</span>
						<font size="4">
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">MyExeDlg.h</span>
								<span style="COLOR: #000000">"</span>
						</font>
						<span style="COLOR: #000000">
								<br />
								<font size="4">
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#ifdef _DEBUG<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></font>
						</span>
						<font size="4">
								<span style="COLOR: #0000ff">#define</span>
								<span style="COLOR: #000000"> new DEBUG_NEW</span>
						</font>
						<span style="COLOR: #000000">
								<br />
								<font size="4">
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								</font>
						</span>
						<font size="4">
								<span style="COLOR: #0000ff">#undef</span>
								<span style="COLOR: #000000"> THIS_FILE</span>
						</font>
						<span style="COLOR: #000000">
								<br />
								<font size="4">
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								</font>
						</span>
						<font size="4">
								<span style="COLOR: #0000ff">static</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">char</span>
								<span style="COLOR: #000000"> THIS_FILE[] </span>
								<span style="COLOR: #000000">=</span>
						</font>
						<font size="4">
								<span style="COLOR: #000000"> __FILE__;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
								<span style="COLOR: #0000ff">#endif</span>
						</font>
						<span style="COLOR: #000000">
								<br />
								<font size="4">
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
								</font>
						</span>
						<font size="4">
								<span style="COLOR: #0000ff">using</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">namespace</span>
						</font>
						<span style="COLOR: #000000">
								<font size="4"> MYPROJLib;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />以下代码略<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></font>
						</span>
				</div>
		</span>
		<font color="#ff1493">
				<font size="5">3.<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial"><font color="#ff1493" size="5">初始化</font></span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: Arial"><font color="#ff1493" size="5">COM </font></span></font>
		</font>
		<span style="FONT-SIZE: 9pt; COLOR: #333333; LINE-HEIGHT: 150%; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">
				<font size="4">
						<font color="#ff1493" size="5">库</font>:在调用Dll的类的构造函数或者相关的地方调用CreateCom(CString strComName)，其中strComName为借口名字。例如MyProj.dll中的MyCom接口，则strComName为“MyProj.MyCom”即CreateCom("MyProj.MyCom");<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">Create函数：<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />BOOL CMyExeDlg::CreateCom(CString strComName)<br /><img id="Codehighlighter1_56_597_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_597_Open_Text.style.display='none'; Codehighlighter1_56_597_Closed_Image.style.display='inline'; Codehighlighter1_56_597_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_56_597_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_56_597_Closed_Text.style.display='none'; Codehighlighter1_56_597_Open_Image.style.display='inline'; Codehighlighter1_56_597_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_56_597_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_56_597_Open_Text"><span style="COLOR: #000000">{    <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> length </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> strComName.GetLength();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    size_t aLen </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> length </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> wLen </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> MultiByteToWideChar(    CP_ACP,    </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,strComName,aLen,    NULL,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    LPOLESTR lpFileName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> WCHAR [wLen];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    MultiByteToWideChar(CP_ACP,    </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,strComName,aLen,lpFileName,wLen);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    HRESULT hr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">CoInitialize(NULL);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    CLSID  clsid; <br /><img id="Codehighlighter1_368_393_Open_Image" onclick="this.style.display='none'; Codehighlighter1_368_393_Open_Text.style.display='none'; Codehighlighter1_368_393_Closed_Image.style.display='inline'; Codehighlighter1_368_393_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_368_393_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_368_393_Closed_Text.style.display='none'; Codehighlighter1_368_393_Open_Image.style.display='inline'; Codehighlighter1_368_393_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    hr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">CLSIDFromProgID(</span><span id="Codehighlighter1_368_393_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_368_393_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">OLESTR("MyProj.MyCom")</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">lpFileName,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">clsid);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(FAILED(hr))<br /><img id="Codehighlighter1_431_481_Open_Image" onclick="this.style.display='none'; Codehighlighter1_431_481_Open_Text.style.display='none'; Codehighlighter1_431_481_Closed_Image.style.display='inline'; Codehighlighter1_431_481_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_431_481_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_431_481_Closed_Text.style.display='none'; Codehighlighter1_431_481_Open_Image.style.display='inline'; Codehighlighter1_431_481_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_431_481_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_431_481_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        AfxMessageBox(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">COM Failed</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> FALSE;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    ptr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    hr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(IMyCom),(LPVOID</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ptr); <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> TRUE;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><br /><font color="#ff1493" size="5">4. 在调用Dll类的头文件中定义接口</font>： IMyCom  *ptr;（其中IMyCom  为接口）<br /><br /><font color="#ff1493" size="5">5. 调用接口的函数</font>：例如  ptr-&gt;MyF1();<br /><br /><font color="#ff1493" size="5">6. 释放接口</font>：在调用Dll类的析构函数或相关的释放函数中调用 ptr-&gt;Release(); CoUninitialize();<br /></font>
		</span>
<img src ="http://www.cppblog.com/ice197983/aggbug/4202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ice197983/" target="_blank">黑色幽灵</a> 2006-03-15 16:48 <a href="http://www.cppblog.com/ice197983/articles/4202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用ATL创建COM组件详细解说</title><link>http://www.cppblog.com/ice197983/articles/4178.html</link><dc:creator>黑色幽灵</dc:creator><author>黑色幽灵</author><pubDate>Wed, 15 Mar 2006 03:22:00 GMT</pubDate><guid>http://www.cppblog.com/ice197983/articles/4178.html</guid><wfw:comment>http://www.cppblog.com/ice197983/comments/4178.html</wfw:comment><comments>http://www.cppblog.com/ice197983/articles/4178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ice197983/comments/commentRss/4178.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ice197983/services/trackbacks/4178.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n...&nbsp;&nbsp;<a href='http://www.cppblog.com/ice197983/articles/4178.html'>阅读全文</a><img src ="http://www.cppblog.com/ice197983/aggbug/4178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ice197983/" target="_blank">黑色幽灵</a> 2006-03-15 11:22 <a href="http://www.cppblog.com/ice197983/articles/4178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用ATL实现QuickTime多媒体文件播放</title><link>http://www.cppblog.com/ice197983/articles/4175.html</link><dc:creator>黑色幽灵</dc:creator><author>黑色幽灵</author><pubDate>Wed, 15 Mar 2006 03:15:00 GMT</pubDate><guid>http://www.cppblog.com/ice197983/articles/4175.html</guid><wfw:comment>http://www.cppblog.com/ice197983/comments/4175.html</wfw:comment><comments>http://www.cppblog.com/ice197983/articles/4175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ice197983/comments/commentRss/4175.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ice197983/services/trackbacks/4175.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 摘要&nbsp; 本文主要介绍了Windows平台上Visual C++ 6利用ATL库和QuickTime SDK开发播放QuickTime多媒体软件。为从事多媒体播放开发工作者提供借鉴和参考。关键词&nbsp; 多媒体 播放 QuickTime ATL&nbsp;1 前言在当今多媒体播放软件主要有Windows media player、Real player和QuickTim...&nbsp;&nbsp;<a href='http://www.cppblog.com/ice197983/articles/4175.html'>阅读全文</a><img src ="http://www.cppblog.com/ice197983/aggbug/4175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ice197983/" target="_blank">黑色幽灵</a> 2006-03-15 11:15 <a href="http://www.cppblog.com/ice197983/articles/4175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ATL向导</title><link>http://www.cppblog.com/ice197983/articles/4130.html</link><dc:creator>黑色幽灵</dc:creator><author>黑色幽灵</author><pubDate>Tue, 14 Mar 2006 04:33:00 GMT</pubDate><guid>http://www.cppblog.com/ice197983/articles/4130.html</guid><wfw:comment>http://www.cppblog.com/ice197983/comments/4130.html</wfw:comment><comments>http://www.cppblog.com/ice197983/articles/4130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ice197983/comments/commentRss/4130.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ice197983/services/trackbacks/4130.html</trackback:ping><description><![CDATA[<FONT color=#ff1493 size=5><STRONG>一.新建工程</STRONG></FONT><BR><IMG style="WIDTH: 358px; HEIGHT: 300px" height=306 alt="" hspace=0 src="file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/My%20Pictures/ATL/1_en.bmp" width=320 align=baseline border=0><IMG style="WIDTH: 377px; HEIGHT: 296px" height=318 alt="" hspace=0 src="file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/My%20Pictures/ATL/1_jap.bmp" width=509 align=baseline border=0><BR>■ COM 服 务 程 序 的 类 型： 
<P><FONT size=3><FONT color=#ffffff><BIG>----</BIG></FONT> <B><BIG>动 态 连 接 库（Dynamic Linking Library）</BIG></B><BIG> 最 终 产 生 一 个 动 态 连 接 库(DLL) 形 式 的COM 服 务 程 序； </BIG></FONT></P>
<P><FONT size=3><FONT color=#ffffff><BIG>----</BIG></FONT> <B><BIG>应 用 程 序（Executable application）</BIG></B><BIG> 最 终 产 生 一 个 可 执 行 程 序 类 型(EXE) 的COM 服 务 程 序； </BIG></FONT></P>
<P><FONT size=3><FONT color=#ffffff><BIG>----</BIG></FONT> <B><BIG>NT 服 务（NT Service）</BIG></B><BIG> 产 生 一 个 以NT 服 务 方 式 运 行 的COM 服 务 程 序。 </BIG></FONT></P>
<P><FONT size=3><BIG>&nbsp;■ 下一组选项<BR><STRONG>&nbsp;&nbsp;&nbsp;&nbsp; 允 许 嵌 入Proxy/Stub 代 码。</STRONG> 由Microsoft 提 供 的MIDL 编 译IDL 文 件 以 后， 将 产 生 用 于 对 象 调 度（Marshaling） 的Proxy/Stub 的 代 码。 在 传 统 方 式 下， 这 部 分 代 码 与COM 服 务 程 序 的 代 码 是 分 离 的， 但 是 由 于 新 的COM 标 准 支 持 多 线 程 环 境 下 的COM 对 象 服 务， 因 此 在 动 态 连 接 库 的COM 服 务 程 序 中 也 要 有Proxy/Stub 的 支 持。 为 了 支 持 在 网 络 上 的 传 输，ATL 允 许 用 户 选 择 将Proxy/Stub 的 代 码 包 括 在 生 成 的DLL 代 码 中。 这 个 选 项 在EXE 和NT 服 务 类 型 的COM 应 用 条 件 下 不 可 选。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P><FONT size=3><BIG><STRONG>&nbsp;&nbsp;&nbsp;&nbsp; 允 许 支 持MFC。</STRONG> 由 于ATL 对 除COM 以 外 的 基 本 的Windows 编 程 方 面 的 支 持 极 为 有 限， 同 时 许 多 程 序 员 对MFC 又 非 常 熟 悉， 因 此 在ATL 的 工 程 设 置 中 允 许 在ATL 工 程 内 部 支 持 使 用MFC， 即 可 以 使 用MFC 定 义 的 类。 这 一 特 点 给 开 发 人 员 提 供 了 许 多 方 便， 特 别 对 于 习 惯 使 用MFC 的 人 来 说， 能 够 使 用MFC 提 供 的 各 种 功 能 强 大 的 类 的 支 持， 而 不 必 直 接 使 用Windows SDK。 从 另 一 个 方 面 来 看， 在ATL 工 程 中 使 用MFC 同 时 就 丧 失 了ATL 代 码 轻 量 级 的 特 点。 </BIG><BR></P></FONT>
<P><BIG><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <STRONG>支 持MTS</STRONG>。MTS 是Microsoft Transaction Server 的 缩 写， 它 是Microsoft 在COM 技 术 方 面 的 一 个 新 的 分 支， 这 里 不 做 详 细 说 明。<BR>完 成 上 面 的 设 置 以 后， 可 以 选 择Finish 完 成 工 程 的 设 置，ATL 将 创 建 相 应 的 工 程。<BR><FONT color=#ff1493 size=5><STRONG>二. 加入ATL类<BR></STRONG></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完 成 工 程 的 创 建 和 设 置 以 后， 下 一 步 就 是 向 工 程 中 加 入 一 个 新 的ATL 类。Visual Studio 集 成 环 境 提 供 了 向 导 工 具"ATL Object Wizard" 用 于 加 入 一 个 新 的ATL 类。 操 作 过 程 并 不 复 杂， 只 是 一 组 对 话 框 操 作 而 已。 <BR></FONT><FONT size=3><FONT color=#ffffff><BIG>----</BIG></FONT><BIG> 首 先 通 过 集 成 环 境 的"Insert" 菜 单 下 的"New ATL Object..." 命 令 进 入"ATL Object Wizard" 对 话 框， 如 图1 所 示。<BR><IMG alt="" hspace=0 src="file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/My%20Pictures/ATL/2jap.bmp" align=baseline border=0>&nbsp;</BIG></FONT><BR><FONT size=3>这 个 对 话 框 即 为 创 建ATL 对 象 的 向 导 起 始 界 面。 对 话 框 的 左 边 部 分 说 明 了 待 创 建 对 象 的 基 本 类 型， 这 里 主 要 有 以 下 几 种 类 型： </FONT></P>
<UL>
<LI><FONT size=3><BIG>对 象（Object） 基 本 的COM 对 象 类 型； 
<TABLE class=dtTABLE cellSpacing=0>
<TBODY>
<TR vAlign=top>
<TD width="25%"><B>标准控件</B></TD>
<TD width="75%">ActiveX 控件。</TD></TR></TBODY></TABLE></BIG><BR></FONT>
<LI><FONT size=3><BIG>控 制（Control） ActiveX Control 类 型 的ATL 对 象，<STRONG>复合控件</STRONG> <B>(Composite Control)</B>； </BIG><BR>可以包含（类似于对话框）其他 ActiveX 控件或 Windows 控件的 ActiveX 控件。复合控件包含以下内容： 
<UL type=disc>
<LI>实现复合控件的对话框模板。 
<LI>调用时自动注册复合控件的自定义资源 REGISTRY。 
<LI>实现复合控件的 C++ 类。 
<LI>由复合控件公开的 COM 接口。 
<LI>包含复合控件的 HTML 测试页。 </LI></UL>
<P>默认情况下，此控件将 m_bWindowOnly 设置为真，以指示这是一个有窗口的控件。它实现接收映射。</P></FONT>
<LI><FONT size=3><BIG>其 他（Miscellaneous） 辅 助 功 能， 如 对 话 框 的 生 成 等，<STRONG>DHTML 控件</STRONG>； </BIG><BR>ATL DHTML 控件使用 HTML 指定用户界面。DHTML UI 类包含 COM 映射。默认情况下，此控件将 m_bWindowOnly 设置为真，以指示这是一个有窗口的控件。 </FONT>
<LI><BIG><FONT size=3>数 据 访 问（Data Access） 数 据 访 问， 支 持MTS 等。 </FONT></BIG></LI></UL>
<P><FONT size=3><FONT color=#ffffff><BIG>----</BIG></FONT><BIG> 右 边 部 分 说 明 了 每 种 类 型 的 详 细 内 容。 对 于 一 般 的COM 服 务 程 序， 使 用 对 象 表 中 的 简 单 对 象（Simple Object） 就 可 以 了。 </BIG></FONT></P>
<P><FONT size=3><FONT color=#ffffff><BIG>----</BIG></FONT><BIG> 选 定 待 创 建 对 象 的 基 本 类 型 以 后， 单 击"Next" 按 钮 进 入 下 一 步， 进 入 对 象 属 性 设 置 对 话 框。 <FONT size=3>对 象 属 性 设 置 分 为 两 个 过 程： 先 是 对 象 名 字 标 识 的 设 定， 然 后 是 对 对 象 的 基 本 属 性 进 行 设 置。 首 先 是 对 象 的 名 字 标 识 设 置， 如 图2 所 示。<BR></FONT></BIG></FONT></P>
<P><IMG style="WIDTH: 349px; HEIGHT: 290px" height=259 alt="" hspace=0 src="file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/My%20Pictures/ATL/3_jap.bmp" width=349 align=baseline border=0><IMG height=297 alt="" hspace=0 src="C:\Documents and Settings\Administrator\My Documents\My Pictures\ATL\44.bmp" width=350 align=baseline border=0><BR><FONT size=3>在 对 象 标 识 编 辑 框 中 输 入 待 创 建 对 象 的 名 字，ATL 对 象 向 导 将 同 步 地 根 据 用 户 输 入 的 对 象 标 识 设 定 该 对 象 的C++ 标 识 和COM 标 识。 对 象 的C++ 标 识 包 括 对 象 的 类 名、cpp 文 件 名 和 头 文 件 名。COM 标 识 包 括 对 象 在 类 型 库 中 的CoClass 段 和 实 现 的 主 接 口 的 名 字， 同 时 还 有 在 系 统 注 册 表 中 的 类 型 名 以 及ProgID。<BR><IMG alt="" hspace=0 src="C:\Documents and Settings\Administrator\My Documents\My Pictures\ATL\11.bmp" align=baseline border=0><BR><IMG alt="" hspace=0 src="C:\Documents and Settings\Administrator\My Documents\My Pictures\ATL\22.bmp" align=baseline border=0><BR><IMG alt="" hspace=0 src="C:\Documents and Settings\Administrator\My Documents\My Pictures\22.bmp" align=baseline border=0></FONT></P>
<P><FONT size=3><FONT color=#ffffff><BIG>----</BIG></FONT><BIG> 对 象 名 字 标 识 设 置 完 成 以 后， 选 择 对 象 属 性 页（Attribute） 进 入 对 象 的 属 性 设 置 页 面， 如 图 所 示。 </BIG></FONT></P>
<P><IMG style="WIDTH: 357px; HEIGHT: 280px" height=262 alt="" hspace=0 src="file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/My%20Pictures/ATL/4.bmp" width=385 align=baseline border=0><IMG style="WIDTH: 359px; HEIGHT: 287px" height=285 alt="" hspace=0 src="C:\Documents and Settings\Administrator\My Documents\My Pictures\44.bmp" width=381 align=baseline border=0><BR><FONT size=3>对 象 的 属 性 设 置 是ATL 对 象 创 建 过 程 中 最 复 杂 的 部 分， 包 括 以 下 几 个 主 要 部 分： </FONT></P>
<UL>
<LI><BIG><FONT size=3>对 象 的 线 程 模 型（Thread Model） </FONT></BIG>
<P><BIG><FONT size=3>对 象 的 线 程 模 型 是COM 对 象 在 多 线 程 环 境 下 被 访 问 时 对 访 问 方 式 的 控 制， 缺 省 情 况 下 在ATL 中 采 用 的 是 套 间 模 型Apartment， 由 系 统 通 过 消 息 队 列 方 式 提 供 并 发 控 制。 </FONT></BIG></P>
<LI><BIG><FONT size=3>对 象 的 接 口 模 型（Interface） </FONT></BIG>
<P><BIG><FONT size=3>COM 对 象 的 接 口 可 以 是 双 接 口(Dual Interface)。 双 接 口 不 同 于 普 通 接 口(Custom Interface) 之 处 在 于 双 接 口 是 从Automation 基 本 接 口IDispatch 继 承 的， 而 普 通 接 口 是 从IUnknown 接 口 直 接 继 承 来 的。 缺 省 的 接 口 模 型 是 双 接 口。 </FONT></BIG></P>
<LI><BIG><FONT size=3>对 象 的 聚 合 模 型（Aggregate） </FONT></BIG>
<P><BIG><FONT size=3>COM 规 范 不 允 许 对 象 的 实 现 继 承， 但 是 可 以 通 过 聚 合 方 式 重 用 其 他 的COM 对 象。ATL 对 象 属 性 设 置 中 的 聚 合 模 型 可 以 指 定 待 创 建 的COM 对 象 是 否 支 持 聚 合 模 型。 缺 省 的 选 项 是 支 持 对 象 的 聚 合。 </FONT></BIG></P>
<LI><BIG><FONT size=3>对 象 对 错 误 处 理 的 支 持(Support ISupportErrorInfo) </FONT></BIG>
<P><BIG><FONT size=3>选 取 这 个 选 项 可 以 在 对 象 的 运 行 过 程 中 支 持 错 误 处 理。 缺 省 情 况 下 这 个 选 项 不 被 选 中。 </FONT></BIG></P>
<LI><BIG><FONT size=3>对 象 对 连 接 点 的 支 持(Support Connection Points) </FONT></BIG>
<P><BIG><FONT size=3>连 接 点 是COM 对 象 的 事 件 机 制。 选 中 这 个 选 项 可 以 使 待 创 建 的COM 对 象 具 有 发 出 事 件 的 能 力。 缺 省 情 况 下 该 选 项 不 被 选 中。 </FONT></BIG></P>
<LI><BIG><FONT size=3>对 象 对 自 由 线 程 调 度 的 支 持(Free Thread Marshaller, 简 称FTM) </FONT></BIG>
<P><BIG><FONT size=3>对 象 的 自 由 线 程 调 度 是 对 象 在 处 于 自 由 线 程 模 型 状 态 下， 为 了 简 化 对 象 的 访 问 过 程 而 采 用 的 一 种 优 化 策 略。 缺 省 情 况 下 该 选 项 不 被 选 中。 </FONT></BIG></P></LI></UL>
<P><FONT size=3><FONT color=#ffffff><BIG>----</BIG></FONT><BIG> 对 于 上 述 的 任 何 一 个 选 项 的 详 细 描 述 都 涉 及 到COM 技 术 一 些 核 心 的 内 容， 并 且 都 已 超 出 本 文 的 范 围， 因 此 本 文 只 对ATL 给 出 的 缺 省 选 项 加 以 说 明， 对 这 些 内 容 感 兴 趣 的 读 者 可 以 参 考Microsoft 提 供 的 文 档。 </BIG></FONT></P>
<P><FONT size=3><FONT color=#ffffff><BIG>----</BIG></FONT><BIG> 完 成 了 上 面 的 设 置 以 后， 就 可 以 按"OK" 按 钮 完 成 对 象 的 创 建 过 程。 下 一 步 就 是 向 所 生 成 的ATL 类 的 接 口 中 加 入 成 员 函 数 的 定 义， 以 及 接 口 成 员 函 数 的 实 现 过 程。 </BIG></FONT></P>
<P><FONT color=#ff1493>三.加 入 接 口 定 义， 实 现 接 口 函 数<BR></FONT><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp; 加 入 了ATL 类 定 义 之 后， 我 们 可 以 打 开Visual C++ 集 成 环 境 下 项 目 管 理 器（Workspace） 中 的Class View 来 检 查 生 成 的 类 定 义 的 情 况。我 们 可 以 看 到 一 个 新 的 类 已 经 生 成， 同 时 还 生 成 了 相 应 的 接 口 定 义。ATL Object Wizard 为 我 们 生 成 了 类 定 义 的.h 和.cpp 文 件， 此 外 还 有 用 于 接 口 定 义 的IDL 文 件。 有 了 这 些 文 件 以 后， 我 们 就 可 以 为 接 口 加 入 成 员 函 数， 完 成 类 的 定 义。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首 先 在Class View 中 选 中 相 应 的 接 口，&nbsp; 显 示 为 接 口IATLTest， 单 击 鼠 标 右 键 打 开 菜 单， 如 图。 此 弹 出 式 菜 单 定 义 了 为 接 口 加 入 属 性 和 方 法 的 操 作。 选 取 其 中 的"Add Method" 项 可 以 为 接 口 加 入 方 法 成 员， 选 取"Add Property" 则 可 以 为 接 口 加 入 新 的 属 性 成 员<BR>加 入 属 性 和 方 法 的 对 话 框 可 以 参 看 图6 和 图7。 如 果 我 们 要 在 接 口 中 加 入 一 个 方 法， 则 选 取"Add Method" 菜 单 命 令。 假 设 方 法 名 为ABC， 方 法 的 返 回 类 型 为COM 规 定 的HRESULT 类 型。 我 们 也 可 以 定 义 非HRESULT 返 回 类 型 的 函 数， 但 是 这 需 要 手 工 修 改 接 口 定 义 的IDL 文 件。 我 们 定 义ABC 方 法 的 一 个 参 数 为a， 类 型 为 整 数 型。 完 成 了 方 法 的 定 义 以 后， 单 击"OK" 按 钮 则 把 此 方 法 加 入 到 接 口 中<BR></FONT><IMG alt="" hspace=0 src="C:\Documents and Settings\Administrator\My Documents\My Pictures\ATL\5.bmp" align=baseline border=0><BR><FONT size=3>属 性 的 加 入 过 程 是 类 似 的。 属 性 加 入 对 话 框 要 求 指 定 属 性 的 类 型、 名 字 以 及 属 性 的 访 问 方 式。 在 属 性 和 方 法 的 编 辑 对 话 框 中 都 有 一 个"Attributes" 按 钮， 在 给 出 了 一 个 属 性 或 方 法 的 基 本 定 义 之 后， 单 击 此 按 钮， 可 以 对 属 性 和 方 法 的 一 些 高 级 特 性 进 行 设 置。&nbsp; 方 法 成 员 加 入 以 后， 我 们 可 以 通 过Class View 来 检 查ATL 为 我 们 所 做 的 工 作， 如 图8 所 示。 首 先 我 们 看 到ATL 在 接 口 的 定 义 中 加 入 了 该 方 法 的 定 义， 同 时 在 对 应 的ATL 类 定 义 中， 也 加 入 了 一 个 相 应 的 方 法 的 定 义， 在 类 对 应 的.cpp 文 件 中， 加 入 了 此 方 法 的 实 现 框 架。 此 后， 我 们 只 要 在 这 个 函 数 框 架 中 加 入 该 方 法 的 代 码 逻 辑， 一 个 接 口 函 数 的 定 义 和 实 现 就 基 本 完 成 了。 依 照 这 种 方 式， 我 们 可 以 完 成 整 个COM 对 象 的 定 义 和 实 现。&nbsp;完 成 以 上 的 步 骤 之 后， 我 们 就 可 以 编 译 连 接 应 用 了。</FONT><BR><FONT size=3>&nbsp;</FONT></BIG></P></BIG></FONT><img src ="http://www.cppblog.com/ice197983/aggbug/4130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ice197983/" target="_blank">黑色幽灵</a> 2006-03-14 12:33 <a href="http://www.cppblog.com/ice197983/articles/4130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ATL中我们最关心的细节积累</title><link>http://www.cppblog.com/ice197983/articles/4125.html</link><dc:creator>黑色幽灵</dc:creator><author>黑色幽灵</author><pubDate>Tue, 14 Mar 2006 02:50:00 GMT</pubDate><guid>http://www.cppblog.com/ice197983/articles/4125.html</guid><wfw:comment>http://www.cppblog.com/ice197983/comments/4125.html</wfw:comment><comments>http://www.cppblog.com/ice197983/articles/4125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ice197983/comments/commentRss/4125.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ice197983/services/trackbacks/4125.html</trackback:ping><description><![CDATA[<P>4.ATL中,我想在工作线程中触发事件,怎么办?</P>
<P>这里介绍最简单的办法:</P>
<P>CXXXATL为ATL的类</P>
<P>CWork为工作类</P>
<P>static int CWork::WorkThread(void* p)为工作线程函数</P>
<P>首先让CXXXAtl和CWork相互引用,即在CWork类声名前声名class CXXXAtl;</P>
<P>给CWork添加成员指针CXXXAtl* pAtl;</P>
<P>在CXXXAtl类中加入工作类的实例:m_Work;</P>
<P>在CXXXAtl构造函数中加入m_Work.pAtl=this;</P>
<P>CWork调用WorkThread时传入this指针;</P>
<P>在WorkThread中即可通过((CWork*)p)-&gt;pAtl.Fire_XXX()</P>
<P>触发事件</P>
<P>5.为什么我定义了BOOL类型的接口参数在VB中却不能按照True/False选择值?</P>
<P>因为BOOL实际是int 类型的定义,应该使用VARIANT_BOOL类型</P>
<P>6.为什么Debug方式编译正确,但Release方式无法正确编译,提示类似:</P>
<P>&nbsp;&nbsp; Creating library ReleaseMinDependency/Agent.lib and object ReleaseMinDependency/Agent.exp<BR>LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main<BR>ReleaseMinDependency/Agent.dll : fatal error LNK1120: 1 unresolved externals<BR>Error executing link.exe.</P>
<P>打开工程的设置,在C/C++页中Proprocess Definitions中去掉_ATL_MIN_CRT即可</P><img src ="http://www.cppblog.com/ice197983/aggbug/4125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ice197983/" target="_blank">黑色幽灵</a> 2006-03-14 10:50 <a href="http://www.cppblog.com/ice197983/articles/4125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ATL问题集</title><link>http://www.cppblog.com/ice197983/articles/4123.html</link><dc:creator>黑色幽灵</dc:creator><author>黑色幽灵</author><pubDate>Tue, 14 Mar 2006 02:45:00 GMT</pubDate><guid>http://www.cppblog.com/ice197983/articles/4123.html</guid><wfw:comment>http://www.cppblog.com/ice197983/comments/4123.html</wfw:comment><comments>http://www.cppblog.com/ice197983/articles/4123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ice197983/comments/commentRss/4123.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ice197983/services/trackbacks/4123.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: #1 如何使用控件不能改变大小？答：有时我们需要创建不可改变大小的控件，像那种在运行时没有界面的控件（例：时间控件，SysInfo 等）,想做到这种功能的话,请把以下代码加入到控件类的构造函数: m_bAutoSize = TRUE;SIZEL size = {24, 24};AtlPixelToHiMetric(&amp;size, &amp;m_sizeExtent);m_sizeNa...&nbsp;&nbsp;<a href='http://www.cppblog.com/ice197983/articles/4123.html'>阅读全文</a><img src ="http://www.cppblog.com/ice197983/aggbug/4123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ice197983/" target="_blank">黑色幽灵</a> 2006-03-14 10:45 <a href="http://www.cppblog.com/ice197983/articles/4123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>