﻿<?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++博客-r2100</title><link>http://www.cppblog.com/r2100/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 16 Apr 2026 04:17:45 GMT</lastBuildDate><pubDate>Thu, 16 Apr 2026 04:17:45 GMT</pubDate><ttl>60</ttl><item><title>「cannot open shared object file」的解決方案</title><link>http://www.cppblog.com/r2100/archive/2015/12/21/212520.html</link><dc:creator>r2100</dc:creator><author>r2100</author><pubDate>Mon, 21 Dec 2015 03:53:00 GMT</pubDate><guid>http://www.cppblog.com/r2100/archive/2015/12/21/212520.html</guid><wfw:comment>http://www.cppblog.com/r2100/comments/212520.html</wfw:comment><comments>http://www.cppblog.com/r2100/archive/2015/12/21/212520.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/r2100/comments/commentRss/212520.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/r2100/services/trackbacks/212520.html</trackback:ping><description><![CDATA[<div>ld在链接的时候找不到所需的动态库<br />1、安装所需的动态库<br />2、修改链接查找路径配置文件 二选一<br />&nbsp; &nbsp;a）、在有root权限情况下：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "usr/local/lib &gt;&gt; /etc/ld.so.conf"<br />&nbsp; &nbsp;b)、在没有root权限的情况下：<br />&nbsp; &nbsp; &nbsp;&nbsp;<span style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; white-space: pre-wrap; font-size: 15.4px; line-height: 21.56px; background-color: #f8f8f8;">$ echo "export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH" &gt;&gt; ~/.bashrc<br /><br /><br />ps:查找库的方法<br /></span><pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; padding: 6px 10px; border: 1px solid #cccccc; border-radius: 3px; font-size: 15.4px; line-height: 21.56px; background-color: #f8f8f8;"><code style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; padding: 0px; border: none; border-radius: 3px; white-space: pre-wrap; margin: 0px;">$ locate libiconv.so.2
$ whereis libiconv.so.2
$ find /usr /lib -name libiconv.so.2
$ find / -name libiconv.so.2 2&gt;/dev/null</code></pre><span style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; white-space: pre-wrap; font-size: 15.4px; line-height: 21.56px; background-color: #f8f8f8;"><br /><br /><br /><br /><br /></span></div><img src ="http://www.cppblog.com/r2100/aggbug/212520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/r2100/" target="_blank">r2100</a> 2015-12-21 11:53 <a href="http://www.cppblog.com/r2100/archive/2015/12/21/212520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dos、Linux的换行符</title><link>http://www.cppblog.com/r2100/archive/2015/12/20/212519.html</link><dc:creator>r2100</dc:creator><author>r2100</author><pubDate>Sun, 20 Dec 2015 15:02:00 GMT</pubDate><guid>http://www.cppblog.com/r2100/archive/2015/12/20/212519.html</guid><wfw:comment>http://www.cppblog.com/r2100/comments/212519.html</wfw:comment><comments>http://www.cppblog.com/r2100/archive/2015/12/20/212519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/r2100/comments/commentRss/212519.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/r2100/services/trackbacks/212519.html</trackback:ping><description><![CDATA[cat -A 能看到符号<br />Windows: ^M$&nbsp;&nbsp;&nbsp;&nbsp; CR LF<br />Linux:&nbsp;&nbsp; $&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LF<br /><br />对于文本问题，可以使用 <a href="http://sourceforge.net/projects/dos2unix/">UNIX2dox、dos2UNIX</a> 转换<img src ="http://www.cppblog.com/r2100/aggbug/212519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/r2100/" target="_blank">r2100</a> 2015-12-20 23:02 <a href="http://www.cppblog.com/r2100/archive/2015/12/20/212519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ std::string转化为std::wstring 和 一个std::wstring转化为std::string</title><link>http://www.cppblog.com/r2100/archive/2011/04/06/143544.html</link><dc:creator>r2100</dc:creator><author>r2100</author><pubDate>Wed, 06 Apr 2011 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/r2100/archive/2011/04/06/143544.html</guid><wfw:comment>http://www.cppblog.com/r2100/comments/143544.html</wfw:comment><comments>http://www.cppblog.com/r2100/archive/2011/04/06/143544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/r2100/comments/commentRss/143544.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/r2100/services/trackbacks/143544.html</trackback:ping><description><![CDATA[<p>&nbsp;</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: #008000">//</span><span style="COLOR: #008000">&nbsp;把一个wstring转化为string</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;to_string(std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;dest,&nbsp;std::wstring&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;src)<br><img id=Codehighlighter1_91_333_Open_Image onclick="this.style.display='none'; Codehighlighter1_91_333_Open_Text.style.display='none'; Codehighlighter1_91_333_Closed_Image.style.display='inline'; Codehighlighter1_91_333_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_91_333_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_91_333_Closed_Text.style.display='none'; Codehighlighter1_91_333_Open_Image.style.display='inline'; Codehighlighter1_91_333_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_91_333_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_91_333_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;std::setlocale(LC_CTYPE,&nbsp;</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);<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>&nbsp;&nbsp;&nbsp;size_t&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;mbs_len&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;wcstombs(NULL,&nbsp;src.c_str(),&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;std::vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;tmp(mbs_len&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;wcstombs(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">tmp[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],&nbsp;src.c_str(),&nbsp;tmp.size());<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>&nbsp;&nbsp;&nbsp;dest.assign(tmp.begin(),&nbsp;tmp.end()&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<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>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;dest;<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><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;把一个string转化为wstring</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">std::wstring</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;to_wstring(std::wstring</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;dest,&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;src)<br><img id=Codehighlighter1_428_674_Open_Image onclick="this.style.display='none'; Codehighlighter1_428_674_Open_Text.style.display='none'; Codehighlighter1_428_674_Closed_Image.style.display='inline'; Codehighlighter1_428_674_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_428_674_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_428_674_Closed_Text.style.display='none'; Codehighlighter1_428_674_Open_Image.style.display='inline'; Codehighlighter1_428_674_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_428_674_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_428_674_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;std::setlocale(LC_CTYPE,&nbsp;</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);<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>&nbsp;&nbsp;&nbsp;size_t&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;wcs_len&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mbstowcs(NULL,&nbsp;src.c_str(),&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;std::vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">wchar_t</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;tmp(wcs_len&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;mbstowcs(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">tmp[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],&nbsp;src.c_str(),&nbsp;src.size());<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>&nbsp;&nbsp;&nbsp;dest.assign(tmp.begin(),&nbsp;tmp.end()&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<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>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;dest;<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></span></div>
</span>
<img src ="http://www.cppblog.com/r2100/aggbug/143544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/r2100/" target="_blank">r2100</a> 2011-04-06 17:58 <a href="http://www.cppblog.com/r2100/archive/2011/04/06/143544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++书写拷贝构造函数，重载赋值操作符和clone函数需要注意问题</title><link>http://www.cppblog.com/r2100/archive/2011/04/06/143514.html</link><dc:creator>r2100</dc:creator><author>r2100</author><pubDate>Wed, 06 Apr 2011 05:18:00 GMT</pubDate><guid>http://www.cppblog.com/r2100/archive/2011/04/06/143514.html</guid><wfw:comment>http://www.cppblog.com/r2100/comments/143514.html</wfw:comment><comments>http://www.cppblog.com/r2100/archive/2011/04/06/143514.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/r2100/comments/commentRss/143514.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/r2100/services/trackbacks/143514.html</trackback:ping><description><![CDATA[<p><br>对于C++类：显示地写出拷贝构造函数，重载赋值操作符和析构函数是良好的习惯，但在写构造函数时需要注意一些容易的错误，如下面的代码：</p>
<p>&nbsp;</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">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><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></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><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>&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_53_270_Open_Image onclick="this.style.display='none'; Codehighlighter1_53_270_Open_Text.style.display='none'; Codehighlighter1_53_270_Closed_Image.style.display='inline'; Codehighlighter1_53_270_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_53_270_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_270_Closed_Text.style.display='none'; Codehighlighter1_53_270_Open_Image.style.display='inline'; Codehighlighter1_53_270_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;M</span><span id=Codehighlighter1_53_270_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_53_270_Open_Text><span style="COLOR: #000000">{<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></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_72_73_Open_Image onclick="this.style.display='none'; Codehighlighter1_72_73_Open_Text.style.display='none'; Codehighlighter1_72_73_Closed_Image.style.display='inline'; Codehighlighter1_72_73_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_72_73_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_72_73_Closed_Text.style.display='none'; Codehighlighter1_72_73_Open_Image.style.display='inline'; Codehighlighter1_72_73_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;M()</span><span id=Codehighlighter1_72_73_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_72_73_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_93_162_Open_Image onclick="this.style.display='none'; Codehighlighter1_93_162_Open_Text.style.display='none'; Codehighlighter1_93_162_Closed_Image.style.display='inline'; Codehighlighter1_93_162_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_93_162_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_93_162_Closed_Text.style.display='none'; Codehighlighter1_93_162_Open_Image.style.display='inline'; Codehighlighter1_93_162_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;M(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;M&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m)</span><span id=Codehighlighter1_93_162_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_93_162_Open_Text><span style="COLOR: #000000">{<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">copy&nbsp;construtor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(m);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_193_267_Open_Image onclick="this.style.display='none'; Codehighlighter1_193_267_Open_Text.style.display='none'; Codehighlighter1_193_267_Closed_Image.style.display='inline'; Codehighlighter1_193_267_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_193_267_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_193_267_Closed_Text.style.display='none'; Codehighlighter1_193_267_Open_Image.style.display='inline'; Codehighlighter1_193_267_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;M&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;M&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m)</span><span id=Codehighlighter1_193_267_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_193_267_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">问题出在此处</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></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;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">operator&nbsp;=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><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><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_288_340_Open_Image onclick="this.style.display='none'; Codehighlighter1_288_340_Open_Text.style.display='none'; Codehighlighter1_288_340_Closed_Image.style.display='inline'; Codehighlighter1_288_340_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_288_340_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_288_340_Closed_Text.style.display='none'; Codehighlighter1_288_340_Open_Image.style.display='inline'; Codehighlighter1_288_340_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()&nbsp;</span><span id=Codehighlighter1_288_340_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_288_340_Open_Text><span style="COLOR: #000000">{<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>&nbsp;&nbsp;&nbsp;&nbsp;M&nbsp;m1;<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>&nbsp;&nbsp;&nbsp;&nbsp;M&nbsp;m2;<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>&nbsp;&nbsp;&nbsp;&nbsp;m2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m1;<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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</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><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>
<p>&nbsp;</p>
<p>在下面三种情况下会调用拷贝构造函数：</p>
<p>(1)用一个已经实例化了的该类对象，去实例化该类的另外一个对象；</p>
<p>(2)用该类的对象传值的方式作为一个函数的参数；</p>
<p>(3)一个函数返回值为该类的一个对象。</p>
<p>特别地，对于语句 M m;&nbsp; M mm=m; 属于(1)情况，即语句M mm=m;调用的是拷贝构造函数，而不是构造函数。</p>
<p>&nbsp;</p>
<p>但在重载=操作符时，返回值不是引用类型将导致程序运行出现严重问题。即如果出现上面会调用拷贝构造函数的三种情况之一，或者使用=操作符时，拷贝构造函数和operator =将循环递归调用，导致程序出现死循环。原因是拷贝构造函数和operator =之间不断地重复调用。</p>
<p>解决办法：将operator =的返回类型改为引用类型M&amp;，此时调用operator =时不会去调用拷贝构造函数。</p>
<p>&nbsp;</p>
<p>还有，若要写clone时，若通过下面的方式：</p>
<p>&nbsp;</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 id=Codehighlighter1_13_71_Open_Image onclick="this.style.display='none'; Codehighlighter1_13_71_Open_Text.style.display='none'; Codehighlighter1_13_71_Closed_Image.style.display='inline'; Codehighlighter1_13_71_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_13_71_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_13_71_Closed_Text.style.display='none'; Codehighlighter1_13_71_Open_Image.style.display='inline'; Codehighlighter1_13_71_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;M&nbsp;clone()</span><span id=Codehighlighter1_13_71_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_13_71_Open_Text><span style="COLOR: #000000">{<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">clone</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><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></span></div>
<p>前提是拷贝构造函数不能调用clone来完成拷贝，否则出现上面同样的问题，下面的代码就会出现这样的问题</p>
<p>&nbsp;&nbsp;&nbsp; </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 id=Codehighlighter1_13_76_Open_Image onclick="this.style.display='none'; Codehighlighter1_13_76_Open_Text.style.display='none'; Codehighlighter1_13_76_Closed_Image.style.display='inline'; Codehighlighter1_13_76_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_13_76_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_13_76_Closed_Text.style.display='none'; Codehighlighter1_13_76_Open_Image.style.display='inline'; Codehighlighter1_13_76_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">M(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;M&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m)</span><span id=Codehighlighter1_13_76_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_13_76_Open_Text><span style="COLOR: #000000">{<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">copy&nbsp;construtor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clone();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><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></span></div>
<p>总之，在写这些函数时，要特别留意彼此的调用关系。</p>
<p>以下是我的惯用写法：</p>
<p>(A)对于拷贝构造函数和重载=操作符</p>
<p>&nbsp;&nbsp;</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 id=Codehighlighter1_15_84_Open_Image onclick="this.style.display='none'; Codehighlighter1_15_84_Open_Text.style.display='none'; Codehighlighter1_15_84_Closed_Image.style.display='inline'; Codehighlighter1_15_84_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_15_84_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_15_84_Closed_Text.style.display='none'; Codehighlighter1_15_84_Open_Image.style.display='inline'; Codehighlighter1_15_84_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;M(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;M&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m)</span><span id=Codehighlighter1_15_84_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_15_84_Open_Text><span style="COLOR: #000000">{<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">copy&nbsp;construtor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(m);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_116_215_Open_Image onclick="this.style.display='none'; Codehighlighter1_116_215_Open_Text.style.display='none'; Codehighlighter1_116_215_Closed_Image.style.display='inline'; Codehighlighter1_116_215_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_116_215_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_116_215_Closed_Text.style.display='none'; Codehighlighter1_116_215_Open_Image.style.display='inline'; Codehighlighter1_116_215_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;M</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;M&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m)</span><span id=Codehighlighter1_116_215_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_116_215_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">问题出在此处</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></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;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">operator&nbsp;=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_170_186_Open_Image onclick="this.style.display='none'; Codehighlighter1_170_186_Open_Text.style.display='none'; Codehighlighter1_170_186_Closed_Image.style.display='inline'; Codehighlighter1_170_186_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_170_186_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_170_186_Closed_Text.style.display='none'; Codehighlighter1_170_186_Open_Image.style.display='inline'; Codehighlighter1_170_186_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_170_186_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_170_186_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;此处写上成员数据的拷贝&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><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></span></div>
<p>这里写成了inline函数，只是方便说明问题，其实不必非要这么写，可以采取先声明，后定义的常规方法。</p>
<p>(B)对于clone函数</p>
<p>声明：&nbsp; virtual M clone();&nbsp;&nbsp; //考虑继承时的多态</p>
<p>定义：&nbsp;&nbsp;</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 id=Codehighlighter1_12_109_Open_Image onclick="this.style.display='none'; Codehighlighter1_12_109_Open_Text.style.display='none'; Codehighlighter1_12_109_Closed_Image.style.display='inline'; Codehighlighter1_12_109_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_12_109_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_109_Closed_Text.style.display='none'; Codehighlighter1_12_109_Open_Image.style.display='inline'; Codehighlighter1_12_109_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">M&nbsp;M::clone()</span><span id=Codehighlighter1_12_109_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_12_109_Open_Text><span style="COLOR: #000000">{<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">clone</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将在调用处直接调用构造函数，效率高，避免返回局部变量，更安全</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></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;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;M();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><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></span></div>
<p><br>&nbsp;</p>
<img src ="http://www.cppblog.com/r2100/aggbug/143514.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/r2100/" target="_blank">r2100</a> 2011-04-06 13:18 <a href="http://www.cppblog.com/r2100/archive/2011/04/06/143514.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Reuse Statement Handle</title><link>http://www.cppblog.com/r2100/archive/2008/09/12/61687.html</link><dc:creator>r2100</dc:creator><author>r2100</author><pubDate>Fri, 12 Sep 2008 08:04:00 GMT</pubDate><guid>http://www.cppblog.com/r2100/archive/2008/09/12/61687.html</guid><wfw:comment>http://www.cppblog.com/r2100/comments/61687.html</wfw:comment><comments>http://www.cppblog.com/r2100/archive/2008/09/12/61687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/r2100/comments/commentRss/61687.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/r2100/services/trackbacks/61687.html</trackback:ping><description><![CDATA[<br>老板要求重用SQLHSTMT句柄，找到一些资料<br>1、使用SQLExecDirect执行了查询语句，记录集会存放在hstmt中，<br>2、通过SQLBindCol把记录集和变量绑定。<br>3、SQLFreeStmt(hstmt, SQL_UNBIND);释放由先前对此语句句柄进行的
<tt class="xph">SQLBindCol()</tt> 调用绑定的所有列（应用程序变量或文件引用与结果集列之间的关联将断开）。<br>4、SQLCloseCursor(hstmt);将关闭任何与语句句柄相关联的游标并废弃任何暂挂结果<br><br>如果不需要使用返回的结果集<br>1、使用SQLExecDirect执行了查询语句，记录集会存放在hstmt中，<br>2、SQLCloseCursor(hstmt)或者SQLFreeStmt<span>(hstmt,</span>SQL_CLOSE <span>)</span>将关闭任何与语句句柄相关联的游标并废弃任何暂挂结果<br><br><br><br><br><br><img src ="http://www.cppblog.com/r2100/aggbug/61687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/r2100/" target="_blank">r2100</a> 2008-09-12 16:04 <a href="http://www.cppblog.com/r2100/archive/2008/09/12/61687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>http://msdn.microsoft.com/en-us/library/ms716303(VS.85).aspx</title><link>http://www.cppblog.com/r2100/archive/2008/09/11/61570.html</link><dc:creator>r2100</dc:creator><author>r2100</author><pubDate>Thu, 11 Sep 2008 03:31:00 GMT</pubDate><guid>http://www.cppblog.com/r2100/archive/2008/09/11/61570.html</guid><wfw:comment>http://www.cppblog.com/r2100/comments/61570.html</wfw:comment><comments>http://www.cppblog.com/r2100/archive/2008/09/11/61570.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/r2100/comments/commentRss/61570.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/r2100/services/trackbacks/61570.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">SQLExecDirect函数源代码</span><br><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;SQLRETURN<br>ODBCExecDirect(ODBCStmt&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">stmt,&nbsp;SQLCHAR&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">szSqlStr,&nbsp;SQLINTEGER&nbsp;nSqlStr)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">query;<br>&nbsp;&nbsp;&nbsp;&nbsp;MapiMsg&nbsp;ret;<br>&nbsp;&nbsp;&nbsp;&nbsp;MapiHdl&nbsp;hdl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;hdl&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">hdl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">State&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;EXECUTED1&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">State&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;EXECUTED0&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;mapi_more_results(hdl)))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Invalid&nbsp;cursor&nbsp;state&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addStmtError(stmt,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">24000</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;NULL,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SQL_ERROR;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;TODO:&nbsp;convert&nbsp;ODBC&nbsp;escape&nbsp;sequences&nbsp;(&nbsp;{d&nbsp;'value'}&nbsp;or&nbsp;{t&nbsp;'value'}&nbsp;or<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ts&nbsp;'value'}&nbsp;or&nbsp;{escape&nbsp;'e-char'}&nbsp;or&nbsp;{oj&nbsp;outer-join}&nbsp;or<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{fn&nbsp;scalar-function}&nbsp;etc.&nbsp;)&nbsp;to&nbsp;MonetDB&nbsp;SQL&nbsp;syntax&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;query&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ODBCTranslateSQL(szSqlStr,&nbsp;(size_t)&nbsp;nSqlStr,&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">noScan);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCResetStmt(stmt);<br><br>#ifdef&nbsp;ODBCDEBUG<br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCLOG(</span><span style="color: #000000;">"</span><span style="color: #000000;">SQLExecDirect:&nbsp;\</span><span style="color: #000000;">"</span><span style="color: #000000;">%</span><span style="color: #000000;">s\</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;query);<br></span><span style="color: #0000ff;">#endif</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;mapi_query_handle(hdl,&nbsp;query);<br>&nbsp;&nbsp;&nbsp;&nbsp;free(query);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">switch</span><span style="color: #000000;">&nbsp;(ret)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;MOK:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;MTIMEOUT:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Communication&nbsp;link&nbsp;failure&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addStmtError(stmt,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">08S01</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;mapi_error_str(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Dbc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">mid),&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SQL_ERROR;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">default</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;General&nbsp;error&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addStmtError(stmt,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">HY000</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;mapi_error_str(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Dbc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">mid),&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SQL_ERROR;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;now&nbsp;get&nbsp;the&nbsp;result&nbsp;data&nbsp;and&nbsp;store&nbsp;it&nbsp;to&nbsp;our&nbsp;internal&nbsp;data&nbsp;structure&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ODBCInitResult(stmt);<br>}<br><br></span></div>
<div class="title"><a href="http://msdn.microsoft.com/en-us/library/ms716303%28VS.85%29.aspx">http://msdn.microsoft.com/en-us/library/ms716303(VS.85).aspx</a><br>Freeing a Statement Handle ODBC<!----></div>
<!--content type: DocStudio. Transform: devdiv2mtps.xslt.-->
<div id="mainSection">
<div id="mainBody"><span style="color: darkgray;"></span>
<p>
</p>
<p><strong>As mentioned earlier, it is more efficient to reuse statements than to drop them and allocate new ones.</strong> Before executing a new SQL statement on a statement, applications should be sure that the current statement settings are appropriate. These include statement attributes, parameter bindings, and result set bindings. Generally, parameters and result sets for the old SQL statement need to be unbound (by calling <strong>SQLFreeStmt</strong> with the SQL_RESET_PARAMS and SQL_UNBIND options) and rebound for the new SQL statement.</p>
<p>When the application has finished using the statement, it calls <strong>SQLFreeHandle</strong> to free the statement. After freeing the statement, it is an application programming error to use the statement's handle in a call to an ODBC function; doing so has undefined but probably fatal consequences.</p>
<p>When <strong>SQLFreeHandle</strong> is called, the driver releases the structure used to store information about the statement.</p>
<p><strong>SQLDisconnect</strong> automatically frees all statements on a connection.</p>
</div>
</div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;"></span><span style="color: #000000;"></span><span style="color: #008000;">/*</span><span style="color: #008000;">*********************************************<br>&nbsp;*&nbsp;ODBCStmt.c<br>&nbsp;*<br>&nbsp;*&nbsp;Description:<br>&nbsp;*&nbsp;This&nbsp;file&nbsp;contains&nbsp;the&nbsp;functions&nbsp;which&nbsp;operate&nbsp;on<br>&nbsp;*&nbsp;ODBC&nbsp;statement&nbsp;structures/objects&nbsp;(see&nbsp;ODBCStmt.h).<br>&nbsp;*<br>&nbsp;*&nbsp;Author:&nbsp;Martin&nbsp;van&nbsp;Dinther<br>&nbsp;*&nbsp;Date&nbsp;&nbsp;:&nbsp;30&nbsp;aug&nbsp;2002<br>&nbsp;*<br>&nbsp;*********************************************</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ODBCGlobal.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">ODBCStmt.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;ODBC_STMT_MAGIC_NR&nbsp;&nbsp;5461&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;for&nbsp;internal&nbsp;sanity&nbsp;check&nbsp;only&nbsp;*/</span><span style="color: #000000;"><br><br><br></span><span style="color: #008000;">/*</span><span style="color: #008000;"><br>&nbsp;*&nbsp;Creates&nbsp;a&nbsp;new&nbsp;allocated&nbsp;ODBCStmt&nbsp;object&nbsp;and&nbsp;initializes&nbsp;it.<br>&nbsp;*<br>&nbsp;*&nbsp;Precondition:&nbsp;none<br>&nbsp;*&nbsp;Postcondition:&nbsp;returns&nbsp;a&nbsp;new&nbsp;ODBCStmt&nbsp;object<br>&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>ODBCStmt&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;"><br>newODBCStmt(ODBCDbc&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">dbc)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCStmt&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">stmt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(ODBCStmt&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">)&nbsp;malloc(</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(ODBCStmt));<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(stmt);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;assert(dbc);<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(dbc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">mid);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(stmt&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Memory&nbsp;allocation&nbsp;error&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addDbcError(dbc,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">HY001</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;NULL,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Dbc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dbc;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Error&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">RetrievedErrors&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">State&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;INITED;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">hdl&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;mapi_new_handle(dbc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">mid);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">hdl&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Memory&nbsp;allocation&nbsp;error&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addDbcError(dbc,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">HY001</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;NULL,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(stmt);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;assert(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">hdl);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">currentRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">startRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">rowSetSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">queryid&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">nparams&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">querytype&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">rowcount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;add&nbsp;this&nbsp;stmt&nbsp;to&nbsp;the&nbsp;administrative&nbsp;linked&nbsp;stmt&nbsp;list&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dbc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">FirstStmt;<br>&nbsp;&nbsp;&nbsp;&nbsp;dbc</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">FirstStmt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;stmt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">cursorType&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SQL_CURSOR_FORWARD_ONLY;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">cursorScrollable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SQL_NONSCROLLABLE;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">retrieveData&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SQL_RD_ON;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">noScan&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SQL_NOSCAN_OFF;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplRowDescr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;newODBCDesc(dbc);<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplParamDescr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;newODBCDesc(dbc);<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplRowDescr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;newODBCDesc(dbc);<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplParamDescr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;newODBCDesc(dbc);<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">AutoApplRowDescr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplRowDescr;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">AutoApplParamDescr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplParamDescr;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplRowDescr&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplParamDescr&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplRowDescr&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplParamDescr&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destroyODBCStmt(stmt);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplRowDescr</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">sql_desc_alloc_type&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SQL_DESC_ALLOC_AUTO;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplParamDescr</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">sql_desc_alloc_type&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SQL_DESC_ALLOC_AUTO;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplRowDescr</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">sql_desc_alloc_type&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SQL_DESC_ALLOC_AUTO;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplParamDescr</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">sql_desc_alloc_type&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SQL_DESC_ALLOC_AUTO;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplRowDescr</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Stmt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;stmt;<br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplParamDescr</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Stmt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;stmt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Type&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ODBC_STMT_MAGIC_NR;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;set&nbsp;it&nbsp;valid&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;stmt;<br>}<br><br></span><span style="color: #000000;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">SQLFreeHandle<br>ODBCFreeStmt_(ODBCStmt&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">stmt)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;check&nbsp;if&nbsp;statement&nbsp;is&nbsp;not&nbsp;active&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">State&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;EXECUTED0)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;should&nbsp;be&nbsp;closed&nbsp;first&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(SQLFreeStmt_(stmt,&nbsp;SQL_CLOSE)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;SQL_ERROR)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SQL_ERROR;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Ready&nbsp;to&nbsp;destroy&nbsp;the&nbsp;stmt&nbsp;handle&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;destroyODBCStmt(stmt);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SQL_SUCCESS;<br>}<br></span></div>
<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">SQLFreeStmt<br><br>SQLFreeStmt_(ODBCStmt&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">stmt,&nbsp;SQLUSMALLINT&nbsp;option)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">switch</span><span style="color: #000000;">&nbsp;(option)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;SQL_CLOSE:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Note:&nbsp;this&nbsp;option&nbsp;is&nbsp;also&nbsp;called&nbsp;from&nbsp;SQLCancel()&nbsp;and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQLCloseCursor(),&nbsp;so&nbsp;be&nbsp;careful&nbsp;when&nbsp;changing&nbsp;the&nbsp;code&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;close&nbsp;cursor,&nbsp;discard&nbsp;result&nbsp;set,&nbsp;set&nbsp;to&nbsp;prepared&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setODBCDescRecCount(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplRowDescr,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">currentRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">startRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">rowSetSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">State&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;EXECUTED0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">State&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">queryid&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;PREPARED0&nbsp;:&nbsp;INITED;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">State&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;EXECUTED1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">State&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">queryid&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;PREPARED1&nbsp;:&nbsp;INITED;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Important:&nbsp;do&nbsp;not&nbsp;destroy&nbsp;the&nbsp;bind&nbsp;parameters&nbsp;and&nbsp;columns!&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SQL_SUCCESS;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;SQL_DROP:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ODBCFreeStmt_(stmt);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;SQL_UNBIND:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setODBCDescRecCount(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplRowDescr,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SQL_SUCCESS;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">case</span><span style="color: #000000;">&nbsp;SQL_RESET_PARAMS:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setODBCDescRecCount(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ApplParamDescr,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setODBCDescRecCount(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">ImplParamDescr,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapi_clear_params(stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">hdl);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SQL_SUCCESS;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">default</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Invalid&nbsp;attribute/option&nbsp;identifier&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addStmtError(stmt,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">HY092</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;NULL,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;SQL_ERROR;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;not&nbsp;reached&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>}<br></span></div>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">SQLHSTMT的结构<br>typedef&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;tODBCDRIVERSTMT&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Stmt&nbsp;properties&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;Type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;structure&nbsp;type,&nbsp;used&nbsp;for&nbsp;handle&nbsp;validy&nbsp;test&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCError&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">Error;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;pointer&nbsp;to&nbsp;an&nbsp;Error&nbsp;object&nbsp;or&nbsp;NULL&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;RetrievedErrors;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;#&nbsp;of&nbsp;errors&nbsp;already&nbsp;retrieved&nbsp;by&nbsp;SQLError&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCDbc&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">Dbc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Connection&nbsp;context&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;tODBCDRIVERSTMT&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">next;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;the&nbsp;linked&nbsp;list&nbsp;of&nbsp;stmt's&nbsp;in&nbsp;this&nbsp;Dbc&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">enum</span><span style="color: #000000;">&nbsp;StatementState&nbsp;State;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;needed&nbsp;to&nbsp;detect&nbsp;invalid&nbsp;cursor&nbsp;state&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;MapiHdl&nbsp;hdl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;rowcount;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;#&nbsp;affected&nbsp;rows&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;startRow&nbsp;is&nbsp;the&nbsp;row&nbsp;number&nbsp;of&nbsp;first&nbsp;row&nbsp;in&nbsp;the&nbsp;result<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;(0&nbsp;based);&nbsp;rowSetSize&nbsp;is&nbsp;the&nbsp;number&nbsp;of&nbsp;rows&nbsp;in&nbsp;the<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;result&nbsp;set;&nbsp;currentRow&nbsp;is&nbsp;the&nbsp;row&nbsp;number&nbsp;of&nbsp;the<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;row&nbsp;within&nbsp;the&nbsp;current&nbsp;result&nbsp;set&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;currentRow;<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;startRow;<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;rowSetSize;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;currentCol;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;used&nbsp;by&nbsp;SQLGetData()&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;SQLINTEGER&nbsp;retrieved;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;amount&nbsp;of&nbsp;data&nbsp;retrieved&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;queryid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;the&nbsp;query&nbsp;to&nbsp;be&nbsp;executed&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nparams;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;the&nbsp;number&nbsp;of&nbsp;parameters&nbsp;expected&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;querytype;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;query&nbsp;type&nbsp;as&nbsp;returned&nbsp;by&nbsp;server&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;SQLUINTEGER&nbsp;cursorType;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQLUINTEGER&nbsp;cursorScrollable;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQLUINTEGER&nbsp;retrieveData;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQLUINTEGER&nbsp;noScan;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCDesc&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ApplRowDescr;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Application&nbsp;Row&nbsp;Descriptor&nbsp;(ARD)&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCDesc&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ApplParamDescr;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Application&nbsp;Parameter&nbsp;Descriptor&nbsp;(APD)&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCDesc&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ImplRowDescr;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Implementation&nbsp;Row&nbsp;Descriptor&nbsp;(IRD)&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCDesc&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ImplParamDescr;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Implementation&nbsp;Parameter&nbsp;Descriptor&nbsp;(IPD)&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCDesc&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">AutoApplRowDescr;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Auto-allocated&nbsp;ARD&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;ODBCDesc&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">AutoApplParamDescr;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Auto-allocated&nbsp;APD&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Stmt&nbsp;children:&nbsp;none&nbsp;yet&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>}&nbsp;ODBCStmt;<br><br></span></div>
<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #000000;"><br></span></div>
<br><br></span></div><img src ="http://www.cppblog.com/r2100/aggbug/61570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/r2100/" target="_blank">r2100</a> 2008-09-11 11:31 <a href="http://www.cppblog.com/r2100/archive/2008/09/11/61570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DOM资料</title><link>http://www.cppblog.com/r2100/archive/2008/02/26/43295.html</link><dc:creator>r2100</dc:creator><author>r2100</author><pubDate>Tue, 26 Feb 2008 13:12:00 GMT</pubDate><guid>http://www.cppblog.com/r2100/archive/2008/02/26/43295.html</guid><wfw:comment>http://www.cppblog.com/r2100/comments/43295.html</wfw:comment><comments>http://www.cppblog.com/r2100/archive/2008/02/26/43295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/r2100/comments/commentRss/43295.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/r2100/services/trackbacks/43295.html</trackback:ping><description><![CDATA[<table style="TABLE-LAYOUT: fixed">
    <tbody>
        <tr>
            <td>
            <div class=cnt>
            <p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>Dom Programming Guid: （Apache）</strong><a href="http://www.slac.stanford.edu/exp/glast/ground/software/extDoc/xerces/2_6_0/doc/program-dom.html#validation-dynamic">http://www.slac.stanford.edu/exp/glast/ground/software/extDoc/xerces/2_6_0/doc/program-dom.html#validation-dynamic</a></p>
            <p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>Java与XML联合编程之DOM篇：</strong><a href="http://kimmyzhang.zhmy.com/archives/2006/9579.shtml">http://kimmyzhang.zhmy.com/archives/2006/9579.shtml</a></p>
            <p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>DOM初步及jdom的介绍</strong>：<a href="http://www.xml.org.cn/dispbbs.asp?boardID=11&amp;ID=37000">http://www.xml.org.cn/dispbbs.asp?boardID=11&amp;ID=37000</a></p>
            <p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>DOM的一些介绍</strong>：<a href="http://blog.sina.com.cn/u/57db2a730100037i">http://blog.sina.com.cn/u/57db2a730100037i</a></p>
            <p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>用Xerces操作XML文档：</strong><a href="http://blog.sina.com.cn/u/57db2a73010002p5"><strong>http://blog.sina.com.cn/u/57db2a73010002p5</strong></a></p>
            <p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>使用 Xerces-C++ 缓存和序列化 XML 模式：</strong><a href="http://www-128.ibm.com/developerworks/cn/xml/x-xsdxerc.html">http://www-128.ibm.com/developerworks/cn/xml/x-xsdxerc.html</a></p>
            <p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong><font size=3>充分利用 Xerces-C++，第 1 部分：</font></strong><a href="http://www-128.ibm.com/developerworks/cn/xml/x-xercc/">http://www-128.ibm.com/developerworks/cn/xml/x-xercc/</a></p>
            <h1><font size=3><span>充分利用 Xerces-C++，第 1 部分</span>：<a href="http://www-128.ibm.com/developerworks/cn/xml/x-xercc2/"><font size=2>http://www-128.ibm.com/developerworks/cn/xml/x-xercc2/</font></a></font></h1>
            <p><br><strong><span style="FONT-SIZE: 12pt">技巧: 如何利用Xerces C++正确处理XML文档中的WhiteSpaceL：</span></strong><a href="http://www-128.ibm.com/developerworks/cn/xml/tips/x-xercesc2/"><span style="FONT-SIZE: 12pt">http://www-128.ibm.com/developerworks/cn/xml/tips/x-xercesc2/</span></a><br><br>浅谈利用Xerces C++解析XML文档<br><a href="http://hi.baidu.com/fx0517/blog/item/258f12d53c32c6c451da4bb3.html">http://hi.baidu.com/fx0517/blog/item/258f12d53c32c6c451da4bb3.html</a><br><br><br><u><font color=#800080>apache xerces c++ windows 下编译与vc6实例</font></u>&nbsp;<br><br><a href="http://blog.csdn.net/smq65/archive/2006/09/04/1174368.aspx">http://blog.csdn.net/smq65/archive/2006/09/04/1174368.aspx</a></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/r2100/aggbug/43295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/r2100/" target="_blank">r2100</a> 2008-02-26 21:12 <a href="http://www.cppblog.com/r2100/archive/2008/02/26/43295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>error   LNK2005: </title><link>http://www.cppblog.com/r2100/archive/2008/01/31/42269.html</link><dc:creator>r2100</dc:creator><author>r2100</author><pubDate>Thu, 31 Jan 2008 01:52:00 GMT</pubDate><guid>http://www.cppblog.com/r2100/archive/2008/01/31/42269.html</guid><description><![CDATA[低级错误:在头文件中定义全局变量
<img src ="http://www.cppblog.com/r2100/aggbug/42269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/r2100/" target="_blank">r2100</a> 2008-01-31 09:52 <a href="http://www.cppblog.com/r2100/archive/2008/01/31/42269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>