﻿<?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++博客-welcome-随笔分类-VC++.net</title><link>http://www.cppblog.com/stdyh/category/1989.html</link><description>vc java sdk</description><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 00:35:43 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 00:35:43 GMT</pubDate><ttl>60</ttl><item><title>[转载]为什么会出现LNK2005"符号已定义"的链接错误? </title><link>http://www.cppblog.com/stdyh/archive/2007/05/05/23445.html</link><dc:creator>dyh</dc:creator><author>dyh</author><pubDate>Sat, 05 May 2007 08:02:00 GMT</pubDate><guid>http://www.cppblog.com/stdyh/archive/2007/05/05/23445.html</guid><wfw:comment>http://www.cppblog.com/stdyh/comments/23445.html</wfw:comment><comments>http://www.cppblog.com/stdyh/archive/2007/05/05/23445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/stdyh/comments/commentRss/23445.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stdyh/services/trackbacks/23445.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: VC中为什么会出现LNK2005"符号已定义"的链接错误，本文详细介绍了VC链接的文件的过程，以及解决这个错误的方法&nbsp;&nbsp;<a href='http://www.cppblog.com/stdyh/archive/2007/05/05/23445.html'>阅读全文</a><img src ="http://www.cppblog.com/stdyh/aggbug/23445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stdyh/" target="_blank">dyh</a> 2007-05-05 16:02 <a href="http://www.cppblog.com/stdyh/archive/2007/05/05/23445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]Visual C++ MFC 中常用宏的含义</title><link>http://www.cppblog.com/stdyh/archive/2007/01/15/17650.html</link><dc:creator>dyh</dc:creator><author>dyh</author><pubDate>Mon, 15 Jan 2007 11:20:00 GMT</pubDate><guid>http://www.cppblog.com/stdyh/archive/2007/01/15/17650.html</guid><wfw:comment>http://www.cppblog.com/stdyh/comments/17650.html</wfw:comment><comments>http://www.cppblog.com/stdyh/archive/2007/01/15/17650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/stdyh/comments/commentRss/17650.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stdyh/services/trackbacks/17650.html</trackback:ping><description><![CDATA[
		<strong>
				<span class="tpc_title">[转载]Visual C++ MFC 中常用宏的含义</span>
				<br />
				<br />
		</strong>
		<span class="tpc_content">
				<font size="2">文章来源：</font>
				<a href="http://www.vccode.com/" target="_blank">
						<font size="2">http://www.vccode.com/</font>
				</a>
				<br />
				<font size="2">文章作者：不详<br /><br />AND_CATCHAND_CATCH <br />AND_CATCH(exception_class,exception _object_point_name) <br />说明：<br /><br />定义一个代码块，它用于获取废除当前TRY块中的附加异常类型。使用CATCH宏以获得一个异常类型，然后使用AND_CATCH宏获得随后的异常处理代码可以访问异常对象（若合适的话)已得到关于异常的特别原因的更多消息。在AND_CATCH块中调用THROW_LAST宏以便把处理过程移到下个外部异常框架。AND_CATCH可标记CATCH或AND_CATCH块的末尾。 <br /><br />注释： <br />AND_CATCH块被定义成为一个C++作用域（由花括号来描述）。若用户在此作用域定义变量，那么记住他们只在此作用域中可以访问。他也用于exception_object_pointer_name变量。 <br />  <br />ASSERT <br />ASSERT(booleanExpression) <br />说明： <br />计算变量的值。如果结构的值为0，那么此宏便打印一个诊断消息并且成讯运行失败。如果条件为非0，那么什么也不做。 诊断消息的形式为： assertion failed in file in line 其中name是元文件名，num是源文件中运行失败的中断号。 在Release版中，ASSERT不计算表达式的值也就不中断程序。如果必须计算此表达式的值且不管环境如何那么用VERIFY代替ASSERT。 <br />注释： <br />ASSERT只能在Debug版中用 <br /><br />ASSERT_VAILD <br />ASSERT_VAILD(pObject) <br />说明： <br />用于检测关于对象的内部状态的有效性。ASSERT_VALID调用此对象的AssertValid成员函数（把它们作为自己的变量来传递）。在Release版中ASSERT_VALID什么也不做。在DEBUG版中，他检查指针，以不同于NULL的方式进行检查，并调用对象自己的AssertValid成员函数。如果这些检测中有任何一个失败的话，那么他会以与ASSERT相同的方法显示一个警告的消息。 <br />注释： <br />此函数只在DEBUG版中有效。 <br /><br />BEGIN_MESSAGE_MAP <br />BEGIN_MESSAGE_MAP(the class,baseclass) <br />说明： <br />使用BEGIN_MESSAGE_MAP开始用户消息映射的定义。在定义用户类函数的工具（.cpp）文件中，以BEGIN_MESSAGE_MAP宏开始消息映射，然后为每个消息处理函数增加宏项，接着以END_MESSAGE_MAP宏完成消息映射。 <br /><br />CATCH <br />CATCH(exception_class,exception_object_pointer_name) <br />说明： <br />使用此用定义一个代码块，此代码用来获取当前TRY块中都一个异常类型。异常处理代码可以访问异常对象，如何合适的话，就会得到关于异常的特殊原因的更多消息。调用THROW_LAST宏以把处理过程一下一个外部异常框架，如果exception-class是类CExceptioon,那么会获取所有异常类型。用户可以使用CObject::IsKindOf成员函数以确定那个特别异常被排除。一种获取异常的最好方式是使用顺序的AND_CATCH语句，每个带一个不同的异常类型。此异常类型的指针由宏定义，用户不必定义。 <br />注释： <br />此CATCH块被定义作一个C++范围（由花括号描述）。如用户在此范围定义变量，那么它们只在吃范围内可以访问。他还可以用于异常对象的指针名。 <br /><br />DEBUG_NEW <br />#define new DEBUG_NEW <br />说明： <br />帮助查找内存错误。用户在程序中使用DEBUG_NEW,用户通常使用new运算符来从堆上分配。在Debug模式下（但定义了一个DEBUG符号），DEBUG_NEW为它分配的每个对象记录文件名和行号。然后，在用户使用CMemoryState::DumpAllObjectSince成员函数时，每个以DEBUG_NEW分配的对象分配的地方显示出文件名和行号。 为了使用DEBUG_NEW,应在用户的资源文件中插入以下指令： #define new DEBUG_NEW 一旦用户插入本指令，预处理程序将在使用new的地方插入DEBUG_NEW，而MFC作其余的工作。但用户编译自己的程序的一个发行版时，DEBUG_NEW便进行简单的new操作，而且不产生文件名和行号消息。 <br /><br />DECLARE_DYNAMIC <br />DECLARE_DYNAMIC(class_name) <br />说明： <br />但从CObject派生一个类时，此宏增加关于一个对象类的访问运行时间功能。把DECLARE_DYNAMIC宏加入类的头文件中，然后在全部需要访问词类对象的.CPP文件中都包含此模块。如果像所描述那样使用DELCARE_DYNAMIC和IMPLEMENT_DYNAMIC宏，那么用户便可使用RUNTIME_CLASS宏和CObject::IsKindOf函数以在运行时间决定对象类。如果DECLARE_DYNAMIC包含在类定义中，那么IMPLEMETN_DYNAMIC必须包含在类工具中。 <br /><br />DECLARE_DYNCREATE <br />DECLARE_DYNCREATE(class_name) <br />说明： <br />使用DECLARE_DYNCRETE宏以便允许CObject派生类的对象在运行时刻自动建立。主机使用此功能自动建立新对象，例如，但它在串行化过程中从磁盘读一个对象时，文件及视图和框架窗应该支持动态建立，因为框架需要自动建立它。把DECLARE_DYNCREATE宏加入类的.H文件中，然后在全部需要访问此类对象的.CPP文件中包含这一模式。如果DECLARE_DYNCREATE包含在类定义中，那么IMPLEMENT_DYNCREATE必须包含在类工具中。 <br /><br />DECLARE_MESSAGE_MAP <br />DECLARE_MESSAGE_MAP() <br />说明： <br />用户程序中的每个CCmdTarget派生类必须提供消息映射以处理消息。在类定义的末尾使用DECLARE_MESSAGE_MAP宏。接着，在定义类成员函数的.CPP文件中，使用BEGIN_MESSAGE_MAP宏，每个用户消息处理函数的宏项下面的列表以及END_MESSAGE_MAP宏。 <br />注释： <br />如果在DECLARE_MESSAGE_MAP之后定义任何一个成员，那么必须为他们指定一个新存取类型（公共的，私有的，保护的）。 <br /><br />DECLARE_SERIAL <br />DECLARE_SERIAL(class_name) <br />说明： <br />DECLARE_SERIAL为一个可以串行化的CObject派生类产生必要的C++标题代码。串行化是把某个对象的内容从一个文件读出和写入一文件。在.H文件中使用DECLARE_SERIAL宏，接着在需要访问此类对象的全部.CPP文件中包含此文件。如果DECLARE_SERIAL包含在类定义中，那么IMPLEMENT_SERIAL必须包含在类工具中。DECLARE_SERIAL宏包含全部DECLARE_DYNAMIC,IMPLEMENT_DYCREATE的功能。 <br /><br />END_CATCH <br />END_CATCH <br />说明： <br />标识最后的CATCH或AND_CATCH块的末尾。 <br /><br />END_MESSAGE_MAP <br />END_MESSAGE_MAP <br />说明： <br />使用END_MESSAGE_MAP宏结束用户的消息映射定义 <br />IMPLEMENT_DYNAMIC <br />IMPLEMENT_DYNAMIC(class_name,base_class_name) <br />说明： <br />通过运行时在串行结构中为动态CObject派生类访问类名和位置来产生必要的C++代码。在.CPP文件中使用IMPLEMENT_DYNAMIC宏，接着一次链接结果对象代码 <br /><br />IMPLEMENT_DYNCREATE <br />IMPLEMENT_DYNCREATE(class_name,base_class_name) <br />说明： <br />通过DECLARE_DYNCREATE宏来使用IMPLEMENT_DYNCREATE宏，以允许CObject派生类对象在运行时自动建立。主机使用此功能自动建立对象，例如，但它在串行化过程中从磁盘读去一个对象时，他在类工具里加入IMPLEMENT_DYNCREATE宏。若用户使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏,那么接着使用RUNTIME_CLASS宏和CObject::IsKindOf成员函数以在运行时确定对象类。若declare_dyncreate包含在定义中，那么IMPLEMENT_DYNCREATE必须包含在类工具中。 <br /><br />IMPLEMENT_SERIAL <br />IMPLEMENT_SERIAL(class_name,base_class_name,wSchema) <br />说明： <br />通过运行时在串行结构中动态CObject派生类访问类名和位置来建立必要的C++代码。在.CPP文件中使用IMPLEMENT_SERIAL宏，然后一次链接结果对象代码。 <br /><br />ON_COMMAND <br />ON_COMMAND(id,memberFxn) <br />说明： <br />此宏通过ClassWizard或手工插入一个消息映射。它表明那个函数将从一个命令用户接口（例如一个菜单项或toolbar按钮）处理一个命令消息。当一个命令对象通过指定的ID接受到一个Windows WM_COMMAND消息时，ON_COMMAND将调用成员函数memberFxn处理此消息。在用户的消息映射中，对于每个菜单或加速器命令（必须被映射到一个消息处理函数）应该确实有一个ON_COMMAND宏语句。 <br /><br />ON_CONTROL <br />ON_CONTROL(wNotifyCode,id,memberFxn) <br />说明： <br />表明哪个函数将处理一个常规控制表示消息。控制标识消息是那些从一个控制夫发送到母窗口的消息。 <br /><br />ON_MESSAGE <br />ON_MESSAGE(message,memberFxn) <br />说明： <br />指明哪个函数将处理一用户定义消息。用户定义消息通常定义在WM_USER到0x7FF范围内。用户定义消息是那些不是标准Windows WM_MESSAGE消息的任何消息。在用户的消息映射中，每个必须被映射到一个消息处理函数。用户定义消息应该有一个ON_MESSAGE宏语句。 <br /><br />ON_REGISTERED_MESSAGE <br />ON_REGISTERED_MESSAGE(nmessageVarible,memberFxn) <br />说明： <br />Windows的RegisterWindowsMesage函数用于定义一个新窗口消息，此消息保证在整个系统中是唯一的。此宏表明哪个函数处理已注册消息。变量nMessageViable应以NEAR修饰符来定义。 <br /><br />ON_UPDATE_COMMAND_UI <br />ON_UPDATE_COMMAND_UI(id，memberFxn) <br />说明： <br />此宏通常通过ClassWizard被插入一个消息映射，以指明哪个函数将处理一个用户接口个更改命令消息。在用户的消息映射中，每个用户接口更改命令（比讯被映射到一个消息处理函数）应该有一个ON_UPDATE_COMMAND_UI宏语句。 <br /><br />ON_VBXEVENT <br />ON_VBXEVENT(wNotifyCode,memberFxn) <br />说明： <br />此宏通常通过ClassWizard被插入一个消息映射，以指明哪个函数将处理一个来自VBX控制的消息。在用户的消息映射中每个被映射到一消息处理函数的VBX控制消息应该有一个宏语句。 <br /><br />RUNTIME_CLASS <br />RUNTIME_CLASS(class_name) <br />说明： <br />使用此宏从c++类民众获取运行时类结构。RUNTIME_CLASS为由class_name指定的类返回一个指针到CRuntimeClass结构。只有以DECLARE_DYNAMIC,DECLARE_DYNCREATE或DECLARE_SERIAL定义的CObject派生类才返回到一个CRuntimeClass结构的指针。 <br /><br />THROW <br />THROW(exception_object_pointer) <br />说明： <br />派出指定的异常。THROW中断程序的运行，把控制传递给用户程序中的相关的CATCH块。如果用户没有提供CATCH块，那么控制被传递到一个MFC模块，他打印出一个错误并终止运行。 <br /><br />THROW_LAST <br />THROW_LAST() <br />说明： <br />此宏允许用户派出一个局部建立的异常。如果用户试图排除一个刚发现的异常，那么一般此异常将溢出并被删除。使用THROW_LAST,此异常被直接传送到下一个CATCH处理程序。 <br /><br />TRACE <br />TRACE(exp) <br />说明： <br />把一个格式化字符串送到转储设备，例如，文件或调试监视器，而提供与printf相似的功能。同MS_DOS下C程序的printf一样，TRACE宏是一个在程序运行时跟踪变量值的方便形式。在DEBUG环境中，TRACE宏输出到afxDump。在Release版中他不做任何工作。 <br />注释： <br />此宏只在MFC的DEBUG版中有效。 <br /><br />TRACE0 <br />TRACE0(exp) <br />说明： <br />与TRACE相似，但他把跟踪字符串放在代码段中，而不是DGROUP,因此使用少的DGROUP空间。TRACE0是一组跟踪宏的一个变体，这些宏可用于调试输出。这一组包括TRACE0,TRACE1,TRACE2和TRACE3,这些宏不同在于所取参数的数目不同。TRACE0只取一个格式化字符串并可用于简单文本消息。TRACE1取一格式化字符串加上一个变量——一个将转储的变量。同样，TRACE2,TRACE3分别取2个或3个参数（在格式化字符串之后）。如果用户以便以了应用程序的发行版，那么它只把数据转储到afxDump。 <br />注释： <br />此宏只在MFC的DEBUG中有效。 <br /><br /><br />TRACE1 <br />TRACE1(exp,param1) <br />说明： <br />参见TRACE0 <br /><br />TRACE2 <br />TRACE2(exp,param1,param2) <br />说明： <br />参见TRACE0 <br /><br />TRACE3 <br />TRACE3(exp,param1,param2,param3) <br />说明： <br /><br />TRY <br />TRY <br />说明： <br />使用此宏建立一TRY块。一个TRY识别一个可排除异常的代码块。这些异常在随后的CATCH和AND_CATCH块处理。传递是允许的：异常可以传递一个外部TRY块，或者忽略它们或者使用THROW_LAST宏。 <br /><br />VERIFY <br />VERIFY(booleanExpression) <br />说明： <br />在MFC的DEBUG版中，VERIFY宏计算它的变量值。 如果结果为0，那么宏打印一个诊断消息并中止程序。如果条件不为0，那么什么工作也不作。 诊断有如下形式： assertion failed in file in line 其中name是源文件的名字，num是在源文件中失败的中止行号。在MFC的Release版中，VERIFY计算表达式值但不打印或中止程序。例如：如果表达式是个函数调用，那么调用成功。</font>
		</span>
<img src ="http://www.cppblog.com/stdyh/aggbug/17650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stdyh/" target="_blank">dyh</a> 2007-01-15 19:20 <a href="http://www.cppblog.com/stdyh/archive/2007/01/15/17650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]VC中的一些常用方法（20条）</title><link>http://www.cppblog.com/stdyh/archive/2007/01/15/17649.html</link><dc:creator>dyh</dc:creator><author>dyh</author><pubDate>Mon, 15 Jan 2007 11:14:00 GMT</pubDate><guid>http://www.cppblog.com/stdyh/archive/2007/01/15/17649.html</guid><wfw:comment>http://www.cppblog.com/stdyh/comments/17649.html</wfw:comment><comments>http://www.cppblog.com/stdyh/archive/2007/01/15/17649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/stdyh/comments/commentRss/17649.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stdyh/services/trackbacks/17649.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: [转载]VC中的一些常用方法（20条）																文章来源：										www.csdn.net												作者blog：										http://blog.csdn.net/oury/																VC中的一些常用方法 //一、打开CD-ROMmciSendStrin...&nbsp;&nbsp;<a href='http://www.cppblog.com/stdyh/archive/2007/01/15/17649.html'>阅读全文</a><img src ="http://www.cppblog.com/stdyh/aggbug/17649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stdyh/" target="_blank">dyh</a> 2007-01-15 19:14 <a href="http://www.cppblog.com/stdyh/archive/2007/01/15/17649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS.net 2003安装时反复提示重启的问题</title><link>http://www.cppblog.com/stdyh/archive/2006/12/13/16396.html</link><dc:creator>dyh</dc:creator><author>dyh</author><pubDate>Wed, 13 Dec 2006 13:16:00 GMT</pubDate><guid>http://www.cppblog.com/stdyh/archive/2006/12/13/16396.html</guid><wfw:comment>http://www.cppblog.com/stdyh/comments/16396.html</wfw:comment><comments>http://www.cppblog.com/stdyh/archive/2006/12/13/16396.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/stdyh/comments/commentRss/16396.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stdyh/services/trackbacks/16396.html</trackback:ping><description><![CDATA[
		<a class="iAs" oncontextmenu="return false;" onmousemove="kwM(1);" onmouseover="kwE(event,1);" style="CURSOR: hand; COLOR: #0000ff; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="window.open('http://www.baidu.com/s?wd=site:(bokee.com)安装','_blank');" onmouseout="kwL(event);" target="_blank">安装</a>Visual Studio.net 2003时，系统提示"安装<nobr><a class="iAs" oncontextmenu="return false;" onmousemove="kwM(2);" onmouseover="kwE(event,2);" style="CURSOR: hand; COLOR: #0000ff; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="window.open('http://www.baidu.com/s?wd=site:(bokee.com)程序','_blank');" onmouseout="kwL(event);" target="_blank">程序</a></nobr>检测到另一个程序要求<nobr><a class="iAs" oncontextmenu="return false;" onmousemove="kwM(3);" onmouseover="kwE(event,3);" style="CURSOR: hand; COLOR: #0000ff; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="window.open('http://www.baidu.com/s?wd=site:(bokee.com)计算机','_blank');" onmouseout="kwL(event);" target="_blank">计算机</a></nobr>重新启动。必须重新启动计算机后才能安装 Visual Studio .NET 系统必备。系统重新启动后，您需要重新启动安装程序。单击“确定”重新启动。单击“取消”退出安装程序，以后再安装。"系统重新启动后，问题依旧。<br />解决方法：<br />打开注册表，找到下面主键并删除<br />HKEY_LOCAL_MACHINE\SYSTEM\Control001\Contrl\Session Manager\PendingFileRenameOperations，删除后的效果是立杆见影的，马上就可以安装了。<img src ="http://www.cppblog.com/stdyh/aggbug/16396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stdyh/" target="_blank">dyh</a> 2006-12-13 21:16 <a href="http://www.cppblog.com/stdyh/archive/2006/12/13/16396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows应用程序应用XP风格</title><link>http://www.cppblog.com/stdyh/archive/2006/06/22/8832.html</link><dc:creator>dyh</dc:creator><author>dyh</author><pubDate>Thu, 22 Jun 2006 05:04:00 GMT</pubDate><guid>http://www.cppblog.com/stdyh/archive/2006/06/22/8832.html</guid><wfw:comment>http://www.cppblog.com/stdyh/comments/8832.html</wfw:comment><comments>http://www.cppblog.com/stdyh/archive/2006/06/22/8832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/stdyh/comments/commentRss/8832.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stdyh/services/trackbacks/8832.html</trackback:ping><description><![CDATA[
		<p>一、在程序中包含commctrl.h头文件，链接到ComCtl32.lib，并调用InitCommon Controls.<br /></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">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">#if</span>
				<span style="COLOR: #000000"> (_WIN32_IE &gt;= 0x0300)</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    INITCOMMONCONTROLSEX iccx;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    iccx.dwSize </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">sizeof</span>
				<span style="COLOR: #000000">(iccx);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    iccx.dwICC </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ICC_COOL_CLASSES </span>
				<span style="COLOR: #000000">|</span>
				<span style="COLOR: #000000"> ICC_BAR_CLASSES;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    BOOL bRet </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ::InitCommonControlsEx(</span>
				<span style="COLOR: #000000">&amp;</span>
				<span style="COLOR: #000000">iccx);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    bRet;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    ATLASSERT(bRet);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">#else</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    ::InitCommonControls();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">#endif</span>
		</div>
		<p>
				<br />二、向项目中添加一个名为YourApp.exe.manifest的文件，其中的YourApp就写你的可执行文件的名称，这个文件具有XML格式：<br /></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">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">  </span>
				<span style="COLOR: #0000ff">&lt;?</span>
				<span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8" standalone="yes" </span>
				<span style="COLOR: #0000ff">?&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />- </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">assembly </span>
				<span style="COLOR: #ff0000">xmlns</span>
				<span style="COLOR: #0000ff">="urn:schemas-microsoft-com:asm.v1"</span>
				<span style="COLOR: #ff0000"> manifestVersion</span>
				<span style="COLOR: #0000ff">="1.0"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">assemblyIdentity </span>
				<span style="COLOR: #ff0000">version</span>
				<span style="COLOR: #0000ff">="1.0.0.0"</span>
				<span style="COLOR: #ff0000"> processorArchitecture</span>
				<span style="COLOR: #0000ff">="X86"</span>
				<span style="COLOR: #ff0000"> name</span>
				<span style="COLOR: #0000ff">="CompanyName.ProductName.YourApp"</span>
				<span style="COLOR: #ff0000"> type</span>
				<span style="COLOR: #0000ff">="win32"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">description</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">Your application description here.</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">description</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />- </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">dependency</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />- </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">dependentAssembly</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">assemblyIdentity </span>
				<span style="COLOR: #ff0000">type</span>
				<span style="COLOR: #0000ff">="win32"</span>
				<span style="COLOR: #ff0000"> name</span>
				<span style="COLOR: #0000ff">="Microsoft.Windows.Common-Controls"</span>
				<span style="COLOR: #ff0000"> version</span>
				<span style="COLOR: #0000ff">="6.0.0.0"</span>
				<span style="COLOR: #ff0000"> processorArchitecture</span>
				<span style="COLOR: #0000ff">="X86"</span>
				<span style="COLOR: #ff0000"> publicKeyToken</span>
				<span style="COLOR: #0000ff">="6595b64144ccf1df"</span>
				<span style="COLOR: #ff0000"> language</span>
				<span style="COLOR: #0000ff">="*"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">dependentAssembly</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">dependency</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">assembly</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>三、在应用程序的资源文件（YourApp.rc）的顶部中添加这样的一行语句：<br /></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">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST </span>
				<span style="COLOR: #000000">"YourApp</span>
				<span style="COLOR: #000000">.exe.manifest</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>我在程序中没有做第一步也能成功，可能是因为没有用API创建的窗口或动态窗口，在程序中如果调用了CreateWindow函数去创建窗口，则需要执行第一步。</p>
<img src ="http://www.cppblog.com/stdyh/aggbug/8832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stdyh/" target="_blank">dyh</a> 2006-06-22 13:04 <a href="http://www.cppblog.com/stdyh/archive/2006/06/22/8832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理解C run-time library （C运行时库）</title><link>http://www.cppblog.com/stdyh/archive/2006/06/20/8736.html</link><dc:creator>dyh</dc:creator><author>dyh</author><pubDate>Tue, 20 Jun 2006 04:11:00 GMT</pubDate><guid>http://www.cppblog.com/stdyh/archive/2006/06/20/8736.html</guid><wfw:comment>http://www.cppblog.com/stdyh/comments/8736.html</wfw:comment><comments>http://www.cppblog.com/stdyh/archive/2006/06/20/8736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/stdyh/comments/commentRss/8736.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stdyh/services/trackbacks/8736.html</trackback:ping><description><![CDATA[
		<p>1)运行时库就是 C run-time library，是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.</p>
		<p>2)C 语言是所谓的“小内核”语言，就其语言本身来说很小（不多的关键字，程序流程控制，数据类型等）；所以，C 语言内核开发出来之后，Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UNIX 系统函数，并且把其中最常用的部分独立出来，形成头文件和对应的 LIBRARY，C run-time library 就是这样形成的。</p>
		<p>3)随后，随着 C 语言的流行，各个 C 编译器的生产商/个体/团体都遵循老的传统，在不同平台上都有相对应的 Standard Library，但大部分实现都是与各个平台有关的。由于各个 C 编译器对 C 的支持和理解有很多分歧和微妙的差别，所以就有了 ANSI C；ANSI C （主观意图上）详细的规定了 C 语言各个要素的具体含义和编译器实现要求，引进了新的函数声明方式，同时订立了 Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数，应当称为第三方 C 运行库（Third party C run-time libraries）。</p>
		<p>4)C run-time library里面含有初始化代码，还有错误处理代码(例如divide by zero处理)。你写的程序可以没有math库，程序照样运行，只是不能处理复杂的数学运算，不过如果没有了C run-time库，main()就不会被调用，exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数。</p>
		<p>
				<br />5)到了 C++ 世界里，有另外一个概念:Standard C++ Library,它包括了上面所说的 C run-time library 和 STL。包含 C run-time library 的原因很明显，C++ 是 C 的超集，没有理由再重新来一个 C++ run-time library. VC针对C++ 加入的Standard C++ Library主要包括：LIBCP.LIB, LIBCPMT.LIB和 MSVCPRT.LIB</p>
		<p>6)Windows环境下，VC提供的 C run-time library又分为动态运行时库和静态运行时库。<br />动态运行时库主要是DLL库文件msvcrt.dll(or MSVCRTD.DLL for debug build),对应的Import library文件是MSVCRT.LIB(MSVCRTD.LIB for debug build)<br />静态运行时库(release版)对应的主要文件是：<br />LIBC.LIB (Single thread static library, retail version)<br />LIBCMT.LIB (Multithread static library, retail version)</p>
		<p>msvcrt.dll提供几千个C函数，即使是像printf这么低级的函数都在msvcrt.dll里。其实你的程序运行时，很大一部分时间时在这些运行库里运行。在你的程序(release版)被编译时，VC会根据你的编译选项(单线程、多线程或DLL)自动将相应的运行时库文件(libc.lib,libcmt.lib或Import library msvcrt.lib)链接进来。</p>
		<p>编译时到底哪个C run-time library联入你的程序取决于编译选项：<br />/MD, /ML, /MT, /LD   (Use Run-Time Library)<br />你可以VC中通过以下方法设置选择哪个C run-time library联入你的程序：<br />To find these options in the development environment, click Settings on the Project menu. Then click the C/C++ tab, and click Code Generation in the Category box. See the Use Run-Time Library drop-down box.</p>
		<p>从程序可移植性考虑,如果两函数都可完成一种功能，选运行时库函数好,因为各个 C 编译器的生产商对标准C Run-time library提供了统一的支持.</p>
<img src ="http://www.cppblog.com/stdyh/aggbug/8736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stdyh/" target="_blank">dyh</a> 2006-06-20 12:11 <a href="http://www.cppblog.com/stdyh/archive/2006/06/20/8736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>