﻿<?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++博客-goodstudy</title><link>http://www.cppblog.com/cutreaper/</link><description>dayup</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 10:49:03 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 10:49:03 GMT</pubDate><ttl>60</ttl><item><title>C++学习中遇到的两个问题 </title><link>http://www.cppblog.com/cutreaper/archive/2010/05/14/115336.html</link><dc:creator>李立</dc:creator><author>李立</author><pubDate>Fri, 14 May 2010 01:34:00 GMT</pubDate><guid>http://www.cppblog.com/cutreaper/archive/2010/05/14/115336.html</guid><wfw:comment>http://www.cppblog.com/cutreaper/comments/115336.html</wfw:comment><comments>http://www.cppblog.com/cutreaper/archive/2010/05/14/115336.html#Feedback</comments><slash:comments>26</slash:comments><wfw:commentRss>http://www.cppblog.com/cutreaper/comments/commentRss/115336.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cutreaper/services/trackbacks/115336.html</trackback:ping><description><![CDATA[<p>问题一：类的静态指针类型的属性初使化</p>
<p>//test.h</p>
<p>class Test</p>
<p>{</p>
<p>...</p>
<p>public:</p>
<p>　　static WORD* m_test;</p>
<p>...</p>
<p>}</p>
<p>&nbsp;</p>
<p>//test.cpp</p>
<p>#include "test.h"</p>
<p>WORD* Test::m_test = 0;</p>
<p>...</p>
<p>&nbsp;</p>
<p>问题二：类中的模板方法</p>
<p>类中的模板方法不能在cpp中实现，可以在h文件中定义时即实现：</p>
<p>//test.h</p>
<p>class Test</p>
<p>{</p>
<p>...</p>
<p>public:</p>
<p>　　template&lt;class T&gt;</p>
<p>　　BOOL TestMethod(T&amp; result)</p>
<p>　　{</p>
<p>　　　　result = ...;</p>
<p>　　　　return TRUE;</p>
<p>　　}</p>
<p>...</p>
<p>}</p>
<p>&nbsp;</p>
<p>以上两问题如出现均会出现linker错误</p>
<font style="BACKGROUND-COLOR: #ffffff"><a href="http://www.chcool.org/"><font style="COLOR: #ffffff; BACKGROUND-COLOR: #ffffff">北京空调维修中心</font></a><br><br></font><font style="BACKGROUND-COLOR: #ffffff"><a href="http://www.bjhaier.org.cn/"><font style="COLOR: #ffffff; BACKGROUND-COLOR: #ffffff">海尔空调维修</font></a></font>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/cutreaper/aggbug/115336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cutreaper/" target="_blank">李立</a> 2010-05-14 09:34 <a href="http://www.cppblog.com/cutreaper/archive/2010/05/14/115336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++源文件编码问题 </title><link>http://www.cppblog.com/cutreaper/archive/2010/05/06/114546.html</link><dc:creator>李立</dc:creator><author>李立</author><pubDate>Wed, 05 May 2010 23:48:00 GMT</pubDate><guid>http://www.cppblog.com/cutreaper/archive/2010/05/06/114546.html</guid><wfw:comment>http://www.cppblog.com/cutreaper/comments/114546.html</wfw:comment><comments>http://www.cppblog.com/cutreaper/archive/2010/05/06/114546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cutreaper/comments/commentRss/114546.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cutreaper/services/trackbacks/114546.html</trackback:ping><description><![CDATA[1 . VC8(VS2005)<br><br>&nbsp;&nbsp;&nbsp;VC8能识别的源文件编码有三种:ANSI(本地codepage),utf8,utf16. 后面两种要保留BOM,否则VC8不能识别。<br><br>&nbsp;&nbsp; 基本上源文件的编码其实只对文件中的字符串的值有影响。<br><br>先说结论：<br>对于普通字符串("中文1234")，VC8会把它从源文件的编码格式转为ANSI字符串。<br>对于宽字符串(L"中文1234"), VC8会把它从源文件的编码格式转为utf16字符串。<br><br>例子1：test.cpp (编码是utf8)<br>
<div>#include&nbsp;&lt;stdio.h&gt;<br>#include&nbsp;&lt;string.h&gt;<br><br>#define&nbsp;TEST_MSG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"中文1234"<br><br>int&nbsp;main(int&nbsp;argc,&nbsp;char*&nbsp;argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;buf[1024]={0};<br>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buf,TEST_MSG);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("%s\n",buf);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;buf[i]!=0;++i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("0x%2x&nbsp;",(unsigned&nbsp;char)buf[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br>}</div>
<br>如果这个程序在codepage 936(简体中文)上面去compile<br>输出的结果就是 <br>中文1234<br>0xd6 0xd0 0xce 0xc4 0x31 0x32 0x33 0x34<br>可以看出是gb2312的编码，而不是utf8<br><br>如果这个程序在codepage 932(日文)上面去compile<br>输出的结果就是<br>中文1234<br>0x92 0x86 0x95 0xb6 0x31 0x32 0x33 0x34<br>可以看出是shift-jis的编码，也不是utf8<br>(注:shift-jis也包含"中文"两个字)<br><br>也就是说同样的source code在不同的code page下产生不同的可执行文件<br><br>例子2：test.cpp (编码改为ANSI)<br>如果这个程序在codepage 936(简体中文)上面去compile<br>输出的结果就是 <br>中文1234<br>0xd6 0xd0 0xce 0xc4 0x31 0x32 0x33 0x34<br>可以看出是gb2312的编码，而不是utf8<br><br>把相同的file拷贝到codepage 932(日文)上面去compile<br>输出的结果是<br>ﾖﾐﾎﾄ1234<br>0xd6 0xd0 0xce 0xc4 0x31 0x32 0x33 0x34<br>可以看出是binary内容相同，但是string却不同了<br><br>例子三:test.cpp (编码utf8)<br><br>
<div>#include&nbsp;&lt;stdio.h&gt;<br>#include&nbsp;&lt;string.h&gt;<br><br>#define&nbsp;TEST_MSG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L"中文1234"<br><br>int&nbsp;main(int&nbsp;argc,&nbsp;char*&nbsp;argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;buf[1024]={0};<br>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(buf,(const&nbsp;char&nbsp;*)TEST_MSG,sizeof(TEST_MSG));<br>&nbsp;&nbsp;&nbsp;&nbsp;//printf("%s\n",buf);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;sizeof(TEST_MSG);++i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("0x%x&nbsp;",(unsigned&nbsp;char)buf[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br>}</div>
<br>在任何平台下使用vc8去compile，结果都应该是输出<br>0x2d 0x4e 0x87 0x65 0x31 0x0 0x32 0x0 0x33 0x0 0x34 0x0 0x0 0x0<br><br>顺便考你一下：<br>如果想输出"中文1234"的utf8格式，应该如何写代码，保证vc8在任何语言平台下面去compile，结果都一样正确？<br><br><br>2. gcc/g++<br>gcc/g++似乎不支持utf16编码的源文件<br>可以处理ANSI和utf8格式的源文件(no BOM)<br><br>如果采用例子一所用的源文件(utf8编码)<br>会输出<br>0xe4 0xb8 0xad 0xe6 0x96 0x87 0x31 0x32 0x33 0x34<br>可以看出是utf8是编码<br><br>这一点上看vc8和gcc是不同的<br><br>如果采用例子三所用的源文件(编码是utf8,使用L和wchar_t)<br>会输出<br>0x2d 0x4e 0x0 0x0 0x87 0x65 0x0 0x0 0x31 0x0 0x0 0x0 0x32 0x0 0x0 0x0 0x33 0x0 0x0 0x0 0x34 0x0 0x0 0x0 0x0 0x0 0x0 0x0<br>可以看出gcc的wchar_t是四个字节，跟vc8也不同<br><a style="COLOR: #ffffff" href="http://www.aucma.chcool.org/">澳柯玛空调维修</a><span style="COLOR: #ffffff">&nbsp;</span><a style="COLOR: #ffffff" href="http://www.galanz.chcool.org/">格兰仕空调维修</a>
<img src ="http://www.cppblog.com/cutreaper/aggbug/114546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cutreaper/" target="_blank">李立</a> 2010-05-06 07:48 <a href="http://www.cppblog.com/cutreaper/archive/2010/05/06/114546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++编程抛出0xc0000417错误代码</title><link>http://www.cppblog.com/cutreaper/archive/2010/04/28/113806.html</link><dc:creator>李立</dc:creator><author>李立</author><pubDate>Wed, 28 Apr 2010 00:15:00 GMT</pubDate><guid>http://www.cppblog.com/cutreaper/archive/2010/04/28/113806.html</guid><wfw:comment>http://www.cppblog.com/cutreaper/comments/113806.html</wfw:comment><comments>http://www.cppblog.com/cutreaper/archive/2010/04/28/113806.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cutreaper/comments/commentRss/113806.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cutreaper/services/trackbacks/113806.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>近日编写的程序中到处都用了的try...catch处理，但总是会静静地退出，从外部的进程查询它的退出码，结果是0xc0000417，上网一查，未知软件错误。</p>
<p>它是谁来抛出的异常？windows,C++库，用户代码？</p>
<p>我真没有抛出这样的异常，windows自己抛出的异常就应该不叫未知软件错误了，估计是C++框架抛出的。</p>
<p>那么怎么找呢？我直接到VS的安装目录去找0xc0000417，结果在ntstatus.h找到定义：</p>
<p>//<br>// MessageId: STATUS_INVALID_CRUNTIME_PARAMETER<br>//<br>// MessageText:<br>//<br>// An invalid parameter was passed to a C runtime function.<br>//<br>#define STATUS_INVALID_CRUNTIME_PARAMETER ((NTSTATUS)0xC0000417L)</p>
<p>原来是非法句柄错误，但我又没有用_set_invalid_parameter_handler设置处理回调函数。</p>
<p>这样C++框架发现了这一情况，就调用了_invoke_watson函数，它把UnhandledExceptionFilter重设</p>
<p>（导致程序一开始设置的UnhandledExceptionFilter不可用），然后调用默认的UnhandledExceptionFilter之后，</p>
<p>就TerminateProcess结束进程，这就是为什么程序总是静静地退出了。</p>
<br><a style="COLOR: #ffffff" href="http://bjbaiye.org.cn/">百野燃气灶维修</a><span style="COLOR: #ffffff">&nbsp;&nbsp;&nbsp;&nbsp; </span><a href="http://bose.org.cn/"><span style="COLOR: #ffffff">老板燃气灶维修</span></a> 
<img src ="http://www.cppblog.com/cutreaper/aggbug/113806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cutreaper/" target="_blank">李立</a> 2010-04-28 08:15 <a href="http://www.cppblog.com/cutreaper/archive/2010/04/28/113806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>