﻿<?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++博客-天高云淡-随笔分类-代码之中</title><link>http://www.cppblog.com/GlideJi/category/3379.html</link><description>羽扇纶巾谈笑间，樯橹灰飞烟灭。</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 22:31:46 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 22:31:46 GMT</pubDate><ttl>60</ttl><item><title>2000系统下int64与_variant_t 之间的转换</title><link>http://www.cppblog.com/GlideJi/archive/2007/01/18/17751.html</link><dc:creator>流水</dc:creator><author>流水</author><pubDate>Thu, 18 Jan 2007 06:46:00 GMT</pubDate><guid>http://www.cppblog.com/GlideJi/archive/2007/01/18/17751.html</guid><wfw:comment>http://www.cppblog.com/GlideJi/comments/17751.html</wfw:comment><comments>http://www.cppblog.com/GlideJi/archive/2007/01/18/17751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/GlideJi/comments/commentRss/17751.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/GlideJi/services/trackbacks/17751.html</trackback:ping><description><![CDATA[
		<p>昨天遇到一个问题，在我开发环境XP下可以直接将int64转为_variant_t ，_variant_t var(uInt64)就可以了<br />，因为在_variant_t 的构造函数里有_variant_t(__int64 i8Src) throw();_variant_t(unsigned __int64 ui8Src)<br />throw(); 但是当该程序运行在服务器上2000的系统的时候却老是要抛一个异常出来，就是这个问题用去了今天一天的时间，终<br />于在要下班的时候搞定了这个问题，2000及更早的系统不支持varInt64 (vt_I8) 类型的数据，所以_variant_t的构造函数会抛异常，该问题在xp已被修复。<br /><br />来自Borland的解释：Assigning an Int64 variable to an OLEVariant variable incorrectly results in a variant of type varInt64 (vt_I8) which is not supported on Windows 2000 and earlier. Subsequently passing this OLEVariant to an external function (in my case an OLEDB provider) causes a "Bad Variable Type" error on Windows 2000. This is not a problem on Windows XP and later, since it supports the vt_I8 variant type.<br /><br />改进后代码如下：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">_variant_t UINT64TOVARIANT(UINT64 uInt)<br /><img id="Codehighlighter1_40_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_219_Open_Text.style.display='none'; Codehighlighter1_40_219_Closed_Image.style.display='inline'; Codehighlighter1_40_219_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_40_219_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_219_Closed_Text.style.display='none'; Codehighlighter1_40_219_Open_Image.style.display='inline'; Codehighlighter1_40_219_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_40_219_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_40_219_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    _variant_t var;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    var.vt </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> VT_DECIMAL;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    var.decVal.sign </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">; </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">    var.decVal.scale </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">; </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">    var.decVal.Hi32 </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    var.decVal.Lo64 </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> uInt;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> var;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;</span>
		</div>
		<p>
				<br />
				<br />得到：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">UINT64 VARIANTTOUINT64(_variant_t var)<br /><img id="Codehighlighter1_39_69_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_69_Open_Text.style.display='none'; Codehighlighter1_39_69_Closed_Image.style.display='inline'; Codehighlighter1_39_69_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_39_69_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_69_Closed_Text.style.display='none'; Codehighlighter1_39_69_Open_Image.style.display='inline'; Codehighlighter1_39_69_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_39_69_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_39_69_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> var.decVal.Lo64;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
<img src ="http://www.cppblog.com/GlideJi/aggbug/17751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/GlideJi/" target="_blank">流水</a> 2007-01-18 14:46 <a href="http://www.cppblog.com/GlideJi/archive/2007/01/18/17751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>