﻿<?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++博客-我的技术规范-文章分类-utils</title><link>http://www.cppblog.com/panchao1987/category/18647.html</link><description>C/C++, Algorithm</description><language>zh-cn</language><lastBuildDate>Mon, 02 Apr 2012 11:10:57 GMT</lastBuildDate><pubDate>Mon, 02 Apr 2012 11:10:57 GMT</pubDate><ttl>60</ttl><item><title>ATL 控件大小固定为图标的大小</title><link>http://www.cppblog.com/panchao1987/articles/166036.html</link><dc:creator>panchao</dc:creator><author>panchao</author><pubDate>Mon, 20 Feb 2012 01:21:00 GMT</pubDate><guid>http://www.cppblog.com/panchao1987/articles/166036.html</guid><wfw:comment>http://www.cppblog.com/panchao1987/comments/166036.html</wfw:comment><comments>http://www.cppblog.com/panchao1987/articles/166036.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/panchao1987/comments/commentRss/166036.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/panchao1987/services/trackbacks/166036.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->STDMETHOD(SetExtent)(DWORD&nbsp;dwDrawAspect,&nbsp;SIZEL&nbsp;*psizel)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;BITMAP&nbsp;bitmap;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP&nbsp;hbmp&nbsp;=&nbsp;LoadBitmap(&nbsp;_AtlBaseModule.GetResourceInstance(),&nbsp;MAKEINTRESOURCE(IDB_WINSOCKIPV6)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;GetObject&nbsp;(&nbsp;hbmp,&nbsp;<span style="color: #0000FF; ">sizeof</span>(bitmap),&nbsp;&amp;bitmap)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;DeleteObject(&nbsp;hbmp);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;HIMETRIC_INCH&nbsp;=&nbsp;2540;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;hdc&nbsp;=&nbsp;::GetDC(&nbsp;NULL&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;psizel-&gt;cx&nbsp;=&nbsp;MulDiv(&nbsp;bitmap.bmWidth,&nbsp;HIMETRIC_INCH,&nbsp;GetDeviceCaps(&nbsp;hdc,&nbsp;LOGPIXELSX)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;psizel-&gt;cy&nbsp;=&nbsp;MulDiv(&nbsp;bitmap.bmHeight,&nbsp;HIMETRIC_INCH,&nbsp;GetDeviceCaps(&nbsp;hdc,&nbsp;LOGPIXELSY)&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;::ReleaseDC(&nbsp;NULL,&nbsp;hdc);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;IOleObjectImpl&lt;CWinSockIPv6&gt;::SetExtent(&nbsp;dwDrawAspect,&nbsp;&nbsp;psizel);&nbsp;<br />}</div><img src ="http://www.cppblog.com/panchao1987/aggbug/166036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/panchao1987/" target="_blank">panchao</a> 2012-02-20 09:21 <a href="http://www.cppblog.com/panchao1987/articles/166036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>访问SafeArray，含“可选参数”</title><link>http://www.cppblog.com/panchao1987/articles/166000.html</link><dc:creator>panchao</dc:creator><author>panchao</author><pubDate>Sun, 19 Feb 2012 13:01:00 GMT</pubDate><guid>http://www.cppblog.com/panchao1987/articles/166000.html</guid><wfw:comment>http://www.cppblog.com/panchao1987/comments/166000.html</wfw:comment><comments>http://www.cppblog.com/panchao1987/articles/166000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/panchao1987/comments/commentRss/166000.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/panchao1987/services/trackbacks/166000.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br /><br />STDMETHODIMP&nbsp;<br />CWinSockIPv6::<br />SendTo(&nbsp;SAFEARRAY**&nbsp;buf,&nbsp;VARIANT&nbsp;len,&nbsp;LONG*&nbsp;bytesSent)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LONG&nbsp;lBound,&nbsp;uBound;<br />&nbsp;&nbsp;&nbsp;&nbsp;LONG&nbsp;length;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SafeArrayGetLBound(&nbsp;*buf,&nbsp;1,&nbsp;&amp;lBound);<br />&nbsp;&nbsp;&nbsp;&nbsp;SafeArrayGetUBound(&nbsp;*buf,&nbsp;1,&nbsp;&amp;uBound);<br />&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;uBound&nbsp;-&nbsp;lBound&nbsp;+&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;len.vt&nbsp;==&nbsp;VT_ERROR&nbsp;&amp;&amp;&nbsp;len.scode&nbsp;==&nbsp;DISP_E_PARAMNOTFOUND)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;这样&nbsp;length&nbsp;=&nbsp;默认值</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;len.vt&nbsp;!=&nbsp;VT_I4&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VariantChangeType(&nbsp;&amp;len,&nbsp;&amp;len,&nbsp;0,&nbsp;VT_I4);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;len.lVal&nbsp;&gt;&nbsp;length&nbsp;)&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;要发送的数据，怎么可以比&nbsp;length&nbsp;还多呢？</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_FALSE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;len.lVal;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;p;<br />&nbsp;&nbsp;&nbsp;&nbsp;SafeArrayAccessData(&nbsp;*buf,&nbsp;(<span style="color: #0000FF; ">void</span>&nbsp;HUGEP**)&amp;p&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;*bytesSent&nbsp;=&nbsp;CWinSockIPv6Internel&lt;CWinSockIPv6&gt;::sendto(&nbsp;p,&nbsp;length);<br />&nbsp;&nbsp;&nbsp;&nbsp;SafeArrayUnaccessData(*buf);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_OK;<br />}<br /><br />STDMETHODIMP&nbsp;<br />CWinSockIPv6::<br />GetData(&nbsp;SAFEARRAY**&nbsp;buf,&nbsp;LONG*&nbsp;bytesGet)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;*buf&nbsp;!=&nbsp;NULL&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SafeArrayDestroy(&nbsp;*buf&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*buf&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;bytesGet&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;recv_length_&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_OK;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SAFEARRAYBOUND&nbsp;rgsabound[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;rgsabound[0].lLbound&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;rgsabound[0].cElements&nbsp;=&nbsp;recv_length_;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*buf&nbsp;=&nbsp;SafeArrayCreate(&nbsp;VT_UI1,&nbsp;1,&nbsp;rgsabound);&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;*buf&nbsp;==&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_OUTOFMEMORY;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HUGEP&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*&nbsp;p;<br />&nbsp;&nbsp;&nbsp;&nbsp;SafeArrayAccessData(&nbsp;*buf,&nbsp;(<span style="color: #0000FF; ">void</span>&nbsp;HUGEP&nbsp;*&nbsp;FAR&nbsp;*)&amp;p&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(&nbsp;p,&nbsp;recv_buffer_,&nbsp;recv_length_);<br />&nbsp;&nbsp;&nbsp;&nbsp;SafeArrayUnaccessData(*buf);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;bytesGet&nbsp;=&nbsp;recv_length_;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_OK;<br />}<br /></div><img src ="http://www.cppblog.com/panchao1987/aggbug/166000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/panchao1987/" target="_blank">panchao</a> 2012-02-19 21:01 <a href="http://www.cppblog.com/panchao1987/articles/166000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IPV6来了？ UDP AsyncSelect模式</title><link>http://www.cppblog.com/panchao1987/articles/165923.html</link><dc:creator>panchao</dc:creator><author>panchao</author><pubDate>Sat, 18 Feb 2012 11:57:00 GMT</pubDate><guid>http://www.cppblog.com/panchao1987/articles/165923.html</guid><wfw:comment>http://www.cppblog.com/panchao1987/comments/165923.html</wfw:comment><comments>http://www.cppblog.com/panchao1987/articles/165923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/panchao1987/comments/commentRss/165923.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/panchao1987/services/trackbacks/165923.html</trackback:ping><description><![CDATA[<p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;WinSockIPv6Internel.h.h&nbsp;<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;IPV6&nbsp;通讯建立的基本实现<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;author:&nbsp;panchao&nbsp;2012</span><span style="color: #008000; "><br /></span><br />#pragma&nbsp;once<br /><br />#include&nbsp;&lt;memory&gt;<br />#include&nbsp;&lt;tchar.h&gt;<br />#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>&gt;<br /><br />#include&nbsp;&lt;winsock2.h&gt;<br />#include&nbsp;&lt;ws2tcpip.h&gt;<br /><br />#pragma&nbsp;comment(&nbsp;lib,&nbsp;"Ws2_32.lib")<br /><br /><span style="color: #0000FF; ">#define</span>&nbsp;WM_WINSOCKIPV6EVENTS&nbsp;3040&nbsp;<br /><br />template&nbsp;&lt;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br /><span style="color: #0000FF; ">class</span>&nbsp;CWinSockIPv6Internel&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;CMessageMap<br />{<br /><span style="color: #0000FF; ">private</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;CWinSockIPv6Internel&lt;T&gt;&nbsp;thisClass;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;kRECV_BUFFER_SIZE&nbsp;=&nbsp;8096;<br /><br /><span style="color: #0000FF; ">private</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SOCKET&nbsp;socket_;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;std::<span style="color: #0000FF; ">string</span>&nbsp;local_ipaddr_;<br />&nbsp;&nbsp;&nbsp;&nbsp;std::<span style="color: #0000FF; ">string</span>&nbsp;remote_ipaddr_;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;std::<span style="color: #0000FF; ">string</span>&nbsp;local_port_;<br />&nbsp;&nbsp;&nbsp;&nbsp;std::<span style="color: #0000FF; ">string</span>&nbsp;remote_port_;<br /><br /><span style="color: #0000FF; ">public</span>:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;recv_buffer_[kRECV_BUFFER_SIZE];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;recv_length_;<br /><br /><span style="color: #0000FF; ">public</span>:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CWinSockIPv6Internel();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;~CWinSockIPv6Internel();<br /><br /><span style="color: #0000FF; ">private</span>:&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;CWinSockIPv6Internel(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;CWinSockIPv6Internel&amp;&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CWinSockIPv6Internel&amp;&nbsp;<span style="color: #0000FF; ">operator</span>=(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;CWinSockIPv6Internel&amp;&nbsp;);<br /><br /><span style="color: #0000FF; ">public</span>:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;local&nbsp;bind&nbsp;parameter</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;std::<span style="color: #0000FF; ">string</span>&amp;&nbsp;local_ipaddr()&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;local_ipaddr_;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;set_local_ipaddr(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;std::<span style="color: #0000FF; ">string</span>&amp;&nbsp;local_ipaddr&nbsp;)&nbsp;{&nbsp;local_ipaddr_&nbsp;=&nbsp;local_ipaddr;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;std::<span style="color: #0000FF; ">string</span>&amp;&nbsp;local_port()&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;local_port_;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;set_local_port(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;std::<span style="color: #0000FF; ">string</span>&amp;&nbsp;local_port&nbsp;)&nbsp;{&nbsp;local_port_&nbsp;=&nbsp;local_port;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;remote&nbsp;bind&nbsp;parameter</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;std::<span style="color: #0000FF; ">string</span>&amp;&nbsp;remote_ipaddr()&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;remote_ipaddr_;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;set_remote_ipaddr(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;std::<span style="color: #0000FF; ">string</span>&amp;&nbsp;remote_ipaddr&nbsp;)&nbsp;{&nbsp;remote_ipaddr_&nbsp;=&nbsp;remote_ipaddr;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;std::<span style="color: #0000FF; ">string</span>&amp;&nbsp;remote_port()&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;remote_port_;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;set_remote_port(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;std::<span style="color: #0000FF; ">string</span>&amp;&nbsp;remote_port&nbsp;)&nbsp;{&nbsp;remote_port_&nbsp;=&nbsp;remote_port;&nbsp;}<br /><br /><span style="color: #0000FF; ">public</span>:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;bind();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;close();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;sendto(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;buf,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;len&nbsp;);<br /><br /><span style="color: #0000FF; ">protected</span>:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;BEGIN_MSG_MAP(&nbsp;thisClass&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MESSAGE_HANDLER(&nbsp;WM_WINSOCKIPV6EVENTS,&nbsp;OnWinsockIPv6Events)<br />&nbsp;&nbsp;&nbsp;&nbsp;END_MSG_MAP()<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LRESULT&nbsp;OnWinsockIPv6Events(UINT,&nbsp;WPARAM,&nbsp;LPARAM,&nbsp;BOOL&amp;);<br />};<br /><br /><br /><br /><br />template&nbsp;&lt;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br />CWinSockIPv6Internel&lt;T&gt;::<br />CWinSockIPv6Internel()&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;socket_(INVALID_SOCKET),<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;local_ipaddr_(),<br />&nbsp;&nbsp;&nbsp;&nbsp;remote_ipaddr_(),<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;local_port_(),<br />&nbsp;&nbsp;&nbsp;&nbsp;remote_port_(),<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;recv_length_(0)<br />{<br />}<br /><br />template&nbsp;&lt;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br />CWinSockIPv6Internel&lt;T&gt;::<br />~CWinSockIPv6Internel()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;close();<br />}&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br />template&nbsp;&lt;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br /><span style="color: #0000FF; ">int</span>&nbsp;<br />CWinSockIPv6Internel&lt;T&gt;::<br />bind()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;socket_&nbsp;!=&nbsp;INVALID_SOCKET)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WSADATA&nbsp;wsaData;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;::WSAStartup(MAKEWORD(2,&nbsp;2),&nbsp;&amp;wsaData)&nbsp;!=&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::WSACleanup();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;9;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;addrinfo&nbsp;hints;<br />&nbsp;&nbsp;&nbsp;&nbsp;addrinfo*&nbsp;p_source;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;memset(&nbsp;&amp;hints,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(hints));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hints.ai_family&nbsp;=&nbsp;AF_INET6;<br />&nbsp;&nbsp;&nbsp;&nbsp;hints.ai_socktype&nbsp;=&nbsp;SOCK_DGRAM;<br />&nbsp;&nbsp;&nbsp;&nbsp;hints.ai_protocol&nbsp;=&nbsp;IPPROTO_UDP;<br />&nbsp;&nbsp;&nbsp;&nbsp;hints.ai_flags&nbsp;=&nbsp;AI_NUMERICHOST;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Nodename&nbsp;must&nbsp;be&nbsp;a&nbsp;numeric&nbsp;address&nbsp;string</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;::getaddrinfo(&nbsp;local_ipaddr_.c_str(),&nbsp;local_port_.c_str(),&nbsp;&amp;hints,&nbsp;&amp;p_source);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;ret&nbsp;!=&nbsp;0&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATLASSERT(&nbsp;p_source&nbsp;==&nbsp;NULL&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;2;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ATLASSERT(&nbsp;p_source&nbsp;!=&nbsp;NULL&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;socket_&nbsp;=&nbsp;::socket(&nbsp;p_source-&gt;ai_family,&nbsp;p_source-&gt;ai_socktype,&nbsp;p_source-&gt;ai_protocol);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;socket_&nbsp;==&nbsp;INVALID_SOCKET)&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::freeaddrinfo(&nbsp;p_source);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;3;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;::bind&nbsp;(&nbsp;socket_,&nbsp;p_source-&gt;ai_addr,&nbsp;p_source-&gt;ai_addrlen);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;::freeaddrinfo(&nbsp;p_source);&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;no&nbsp;longer&nbsp;need&nbsp;it.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">getsockname</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;ret&nbsp;==&nbsp;SOCKET_ERROR)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::closesocket(&nbsp;socket_);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket_&nbsp;=&nbsp;INVALID_SOCKET;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;4;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;broadcast&nbsp;=&nbsp;TRUE;<br />&nbsp;&nbsp;&nbsp;&nbsp;::setsockopt(&nbsp;socket_,&nbsp;SOL_SOCKET,&nbsp;SO_BROADCAST,&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*)&amp;broadcast,&nbsp;<span style="color: #0000FF; ">sizeof</span>(BOOL));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ATLASSERT(&nbsp;::IsWindow(static_cast&lt;T*&gt;(<span style="color: #0000FF; ">this</span>)-&gt;m_hWnd)&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;::WSAAsyncSelect(&nbsp;socket_,&nbsp;static_cast&lt;T*&gt;(<span style="color: #0000FF; ">this</span>)-&gt;m_hWnd,&nbsp;WM_WINSOCKIPV6EVENTS,&nbsp;FD_READ);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;ret&nbsp;==&nbsp;SOCKET_ERROR&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::closesocket(&nbsp;socket_);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket_&nbsp;=&nbsp;INVALID_SOCKET;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;5;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br /><br />template&nbsp;&lt;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br /><span style="color: #0000FF; ">int</span>&nbsp;<br />CWinSockIPv6Internel&lt;T&gt;::<br />close()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;socket_&nbsp;==&nbsp;INVALID_SOCKET)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;::closesocket(&nbsp;socket_);<br />&nbsp;&nbsp;&nbsp;&nbsp;socket_&nbsp;=&nbsp;INVALID_SOCKET;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;::WSACleanup();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br /><br />template&nbsp;&lt;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br /><span style="color: #0000FF; ">int</span>&nbsp;<br />CWinSockIPv6Internel&lt;T&gt;::<br />sendto(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;buf,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;len&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;socket_&nbsp;==&nbsp;INVALID_SOCKET)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;addrinfo&nbsp;hints;<br />&nbsp;&nbsp;&nbsp;&nbsp;addrinfo*&nbsp;p_destination;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;memset(&nbsp;&amp;hints,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(hints));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hints.ai_family&nbsp;=&nbsp;AF_INET6;<br />&nbsp;&nbsp;&nbsp;&nbsp;hints.ai_socktype&nbsp;=&nbsp;SOCK_DGRAM;<br />&nbsp;&nbsp;&nbsp;&nbsp;hints.ai_protocol&nbsp;=&nbsp;IPPROTO_UDP;<br />&nbsp;&nbsp;&nbsp;&nbsp;hints.ai_flags&nbsp;=&nbsp;AI_NUMERICHOST;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Nodename&nbsp;must&nbsp;be&nbsp;a&nbsp;numeric&nbsp;address&nbsp;string</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;::getaddrinfo(&nbsp;remote_ipaddr_.c_str(),&nbsp;remote_port_.c_str(),&nbsp;&amp;hints,&nbsp;&amp;p_destination);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;ret&nbsp;!=&nbsp;0&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATLASSERT(&nbsp;p_destination&nbsp;==&nbsp;NULL&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;2;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ATLASSERT(&nbsp;p_destination&nbsp;!=&nbsp;NULL&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;::sendto(&nbsp;socket_,&nbsp;buf,&nbsp;len,&nbsp;0,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_destination-&gt;ai_addr,&nbsp;p_destination-&gt;ai_addrlen);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;::freeaddrinfo(&nbsp;p_destination);&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;no&nbsp;longer&nbsp;need&nbsp;it.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ret;<br />}<br /><br />template&nbsp;&lt;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br />LRESULT&nbsp;<br />CWinSockIPv6Internel&lt;T&gt;::<br />OnWinsockIPv6Events(UINT&nbsp;uMsg,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam,&nbsp;BOOL&amp;&nbsp;bHandled)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;socket_&nbsp;==&nbsp;INVALID_SOCKET)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ret;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;sockaddr_in6&nbsp;recvAddr;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(&nbsp;&amp;recvAddr,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(recvAddr));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;len&nbsp;=&nbsp;<span style="color: #0000FF; ">sizeof</span>(recvAddr);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;::recvfrom(&nbsp;socket_,&nbsp;recv_buffer_,&nbsp;kRECV_BUFFER_SIZE,&nbsp;0,&nbsp;(SOCKADDR*)&amp;recvAddr,&nbsp;&amp;len);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;ret&nbsp;&gt;&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recv_length_&nbsp;=&nbsp;ret;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static_cast&lt;T*&gt;(<span style="color: #0000FF; ">this</span>)-&gt;Fire_DataArrival(&nbsp;recv_length_&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recv_length_&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_OK;<br />}<br /></div></p><img src ="http://www.cppblog.com/panchao1987/aggbug/165923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/panchao1987/" target="_blank">panchao</a> 2012-02-18 19:57 <a href="http://www.cppblog.com/panchao1987/articles/165923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>format_bytes_string</title><link>http://www.cppblog.com/panchao1987/articles/165815.html</link><dc:creator>panchao</dc:creator><author>panchao</author><pubDate>Fri, 17 Feb 2012 01:09:00 GMT</pubDate><guid>http://www.cppblog.com/panchao1987/articles/165815.html</guid><wfw:comment>http://www.cppblog.com/panchao1987/comments/165815.html</wfw:comment><comments>http://www.cppblog.com/panchao1987/articles/165815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/panchao1987/comments/commentRss/165815.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/panchao1987/services/trackbacks/165815.html</trackback:ping><description><![CDATA[<div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br />HRESULT&nbsp;__stdcall&nbsp;vbFormatBytesString(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;data,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;number_of_datas,&nbsp;VARIANT*&nbsp;outstring)<br />{<br />#pragma&nbsp;pack(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;OLECHAR&nbsp;__map_table_16[4*256]&nbsp;=&nbsp;{&nbsp;L'0',L'0',L'&nbsp;',0,L'0',L'1',L'&nbsp;',0,L'0',L'2',L'&nbsp;',0,L'0',L'3',L'&nbsp;',0,L'0',L'4',L'&nbsp;',0,L'0',L'5',L'&nbsp;',0,L'0',L'6',L'&nbsp;',0,L'0',L'7',L'&nbsp;',0,L'0',L'8',L'&nbsp;',0,L'0',L'9',L'&nbsp;',0,L'0',L'A',L'&nbsp;',0,L'0',L'B',L'&nbsp;',0,L'0',L'C',L'&nbsp;',0,L'0',L'D',L'&nbsp;',0,L'0',L'E',L'&nbsp;',0,L'0',L'F',L'&nbsp;',0,L'1',L'0',L'&nbsp;',0,L'1',L'1',L'&nbsp;',0,L'1',L'2',L'&nbsp;',0,L'1',L'3',L'&nbsp;',0,L'1',L'4',L'&nbsp;',0,L'1',L'5',L'&nbsp;',0,L'1',L'6',L'&nbsp;',0,L'1',L'7',L'&nbsp;',0,L'1',L'8',L'&nbsp;',0,L'1',L'9',L'&nbsp;',0,L'1',L'A',L'&nbsp;',0,L'1',L'B',L'&nbsp;',0,L'1',L'C',L'&nbsp;',0,L'1',L'D',L'&nbsp;',0,L'1',L'E',L'&nbsp;',0,L'1',L'F',L'&nbsp;',0,L'2',L'0',L'&nbsp;',0,L'2',L'1',L'&nbsp;',0,L'2',L'2',L'&nbsp;',0,L'2',L'3',L'&nbsp;',0,L'2',L'4',L'&nbsp;',0,L'2',L'5',L'&nbsp;',0,L'2',L'6',L'&nbsp;',0,L'2',L'7',L'&nbsp;',0,L'2',L'8',L'&nbsp;',0,L'2',L'9',L'&nbsp;',0,L'2',L'A',L'&nbsp;',0,L'2',L'B',L'&nbsp;',0,L'2',L'C',L'&nbsp;',0,L'2',L'D',L'&nbsp;',0,L'2',L'E',L'&nbsp;',0,L'2',L'F',L'&nbsp;',0,L'3',L'0',L'&nbsp;',0,L'3',L'1',L'&nbsp;',0,L'3',L'2',L'&nbsp;',0,L'3',L'3',L'&nbsp;',0,L'3',L'4',L'&nbsp;',0,L'3',L'5',L'&nbsp;',0,L'3',L'6',L'&nbsp;',0,L'3',L'7',L'&nbsp;',0,L'3',L'8',L'&nbsp;',0,L'3',L'9',L'&nbsp;',0,L'3',L'A',L'&nbsp;',0,L'3',L'B',L'&nbsp;',0,L'3',L'C',L'&nbsp;',0,L'3',L'D',L'&nbsp;',0,L'3',L'E',L'&nbsp;',0,L'3',L'F',L'&nbsp;',0,L'4',L'0',L'&nbsp;',0,L'4',L'1',L'&nbsp;',0,L'4',L'2',L'&nbsp;',0,L'4',L'3',L'&nbsp;',0,L'4',L'4',L'&nbsp;',0,L'4',L'5',L'&nbsp;',0,L'4',L'6',L'&nbsp;',0,L'4',L'7',L'&nbsp;',0,L'4',L'8',L'&nbsp;',0,L'4',L'9',L'&nbsp;',0,L'4',L'A',L'&nbsp;',0,L'4',L'B',L'&nbsp;',0,L'4',L'C',L'&nbsp;',0,L'4',L'D',L'&nbsp;',0,L'4',L'E',L'&nbsp;',0,L'4',L'F',L'&nbsp;',0,L'5',L'0',L'&nbsp;',0,L'5',L'1',L'&nbsp;',0,L'5',L'2',L'&nbsp;',0,L'5',L'3',L'&nbsp;',0,L'5',L'4',L'&nbsp;',0,L'5',L'5',L'&nbsp;',0,L'5',L'6',L'&nbsp;',0,L'5',L'7',L'&nbsp;',0,L'5',L'8',L'&nbsp;',0,L'5',L'9',L'&nbsp;',0,L'5',L'A',L'&nbsp;',0,L'5',L'B',L'&nbsp;',0,L'5',L'C',L'&nbsp;',0,L'5',L'D',L'&nbsp;',0,L'5',L'E',L'&nbsp;',0,L'5',L'F',L'&nbsp;',0,L'6',L'0',L'&nbsp;',0,L'6',L'1',L'&nbsp;',0,L'6',L'2',L'&nbsp;',0,L'6',L'3',L'&nbsp;',0,L'6',L'4',L'&nbsp;',0,L'6',L'5',L'&nbsp;',0,L'6',L'6',L'&nbsp;',0,L'6',L'7',L'&nbsp;',0,L'6',L'8',L'&nbsp;',0,L'6',L'9',L'&nbsp;',0,L'6',L'A',L'&nbsp;',0,L'6',L'B',L'&nbsp;',0,L'6',L'C',L'&nbsp;',0,L'6',L'D',L'&nbsp;',0,L'6',L'E',L'&nbsp;',0,L'6',L'F',L'&nbsp;',0,L'7',L'0',L'&nbsp;',0,L'7',L'1',L'&nbsp;',0,L'7',L'2',L'&nbsp;',0,L'7',L'3',L'&nbsp;',0,L'7',L'4',L'&nbsp;',0,L'7',L'5',L'&nbsp;',0,L'7',L'6',L'&nbsp;',0,L'7',L'7',L'&nbsp;',0,L'7',L'8',L'&nbsp;',0,L'7',L'9',L'&nbsp;',0,L'7',L'A',L'&nbsp;',0,L'7',L'B',L'&nbsp;',0,L'7',L'C',L'&nbsp;',0,L'7',L'D',L'&nbsp;',0,L'7',L'E',L'&nbsp;',0,L'7',L'F',L'&nbsp;',0,L'8',L'0',L'&nbsp;',0,L'8',L'1',L'&nbsp;',0,L'8',L'2',L'&nbsp;',0,L'8',L'3',L'&nbsp;',0,L'8',L'4',L'&nbsp;',0,L'8',L'5',L'&nbsp;',0,L'8',L'6',L'&nbsp;',0,L'8',L'7',L'&nbsp;',0,L'8',L'8',L'&nbsp;',0,L'8',L'9',L'&nbsp;',0,L'8',L'A',L'&nbsp;',0,L'8',L'B',L'&nbsp;',0,L'8',L'C',L'&nbsp;',0,L'8',L'D',L'&nbsp;',0,L'8',L'E',L'&nbsp;',0,L'8',L'F',L'&nbsp;',0,L'9',L'0',L'&nbsp;',0,L'9',L'1',L'&nbsp;',0,L'9',L'2',L'&nbsp;',0,L'9',L'3',L'&nbsp;',0,L'9',L'4',L'&nbsp;',0,L'9',L'5',L'&nbsp;',0,L'9',L'6',L'&nbsp;',0,L'9',L'7',L'&nbsp;',0,L'9',L'8',L'&nbsp;',0,L'9',L'9',L'&nbsp;',0,L'9',L'A',L'&nbsp;',0,L'9',L'B',L'&nbsp;',0,L'9',L'C',L'&nbsp;',0,L'9',L'D',L'&nbsp;',0,L'9',L'E',L'&nbsp;',0,L'9',L'F',L'&nbsp;',0,L'A',L'0',L'&nbsp;',0,L'A',L'1',L'&nbsp;',0,L'A',L'2',L'&nbsp;',0,L'A',L'3',L'&nbsp;',0,L'A',L'4',L'&nbsp;',0,L'A',L'5',L'&nbsp;',0,L'A',L'6',L'&nbsp;',0,L'A',L'7',L'&nbsp;',0,L'A',L'8',L'&nbsp;',0,L'A',L'9',L'&nbsp;',0,L'A',L'A',L'&nbsp;',0,L'A',L'B',L'&nbsp;',0,L'A',L'C',L'&nbsp;',0,L'A',L'D',L'&nbsp;',0,L'A',L'E',L'&nbsp;',0,L'A',L'F',L'&nbsp;',0,L'B',L'0',L'&nbsp;',0,L'B',L'1',L'&nbsp;',0,L'B',L'2',L'&nbsp;',0,L'B',L'3',L'&nbsp;',0,L'B',L'4',L'&nbsp;',0,L'B',L'5',L'&nbsp;',0,L'B',L'6',L'&nbsp;',0,L'B',L'7',L'&nbsp;',0,L'B',L'8',L'&nbsp;',0,L'B',L'9',L'&nbsp;',0,L'B',L'A',L'&nbsp;',0,L'B',L'B',L'&nbsp;',0,L'B',L'C',L'&nbsp;',0,L'B',L'D',L'&nbsp;',0,L'B',L'E',L'&nbsp;',0,L'B',L'F',L'&nbsp;',0,L'C',L'0',L'&nbsp;',0,L'C',L'1',L'&nbsp;',0,L'C',L'2',L'&nbsp;',0,L'C',L'3',L'&nbsp;',0,L'C',L'4',L'&nbsp;',0,L'C',L'5',L'&nbsp;',0,L'C',L'6',L'&nbsp;',0,L'C',L'7',L'&nbsp;',0,L'C',L'8',L'&nbsp;',0,L'C',L'9',L'&nbsp;',0,L'C',L'A',L'&nbsp;',0,L'C',L'B',L'&nbsp;',0,L'C',L'C',L'&nbsp;',0,L'C',L'D',L'&nbsp;',0,L'C',L'E',L'&nbsp;',0,L'C',L'F',L'&nbsp;',0,L'D',L'0',L'&nbsp;',0,L'D',L'1',L'&nbsp;',0,L'D',L'2',L'&nbsp;',0,L'D',L'3',L'&nbsp;',0,L'D',L'4',L'&nbsp;',0,L'D',L'5',L'&nbsp;',0,L'D',L'6',L'&nbsp;',0,L'D',L'7',L'&nbsp;',0,L'D',L'8',L'&nbsp;',0,L'D',L'9',L'&nbsp;',0,L'D',L'A',L'&nbsp;',0,L'D',L'B',L'&nbsp;',0,L'D',L'C',L'&nbsp;',0,L'D',L'D',L'&nbsp;',0,L'D',L'E',L'&nbsp;',0,L'D',L'F',L'&nbsp;',0,L'E',L'0',L'&nbsp;',0,L'E',L'1',L'&nbsp;',0,L'E',L'2',L'&nbsp;',0,L'E',L'3',L'&nbsp;',0,L'E',L'4',L'&nbsp;',0,L'E',L'5',L'&nbsp;',0,L'E',L'6',L'&nbsp;',0,L'E',L'7',L'&nbsp;',0,L'E',L'8',L'&nbsp;',0,L'E',L'9',L'&nbsp;',0,L'E',L'A',L'&nbsp;',0,L'E',L'B',L'&nbsp;',0,L'E',L'C',L'&nbsp;',0,L'E',L'D',L'&nbsp;',0,L'E',L'E',L'&nbsp;',0,L'E',L'F',L'&nbsp;',0,L'F',L'0',L'&nbsp;',0,L'F',L'1',L'&nbsp;',0,L'F',L'2',L'&nbsp;',0,L'F',L'3',L'&nbsp;',0,L'F',L'4',L'&nbsp;',0,L'F',L'5',L'&nbsp;',0,L'F',L'6',L'&nbsp;',0,L'F',L'7',L'&nbsp;',0,L'F',L'8',L'&nbsp;',0,L'F',L'9',L'&nbsp;',0,L'F',L'A',L'&nbsp;',0,L'F',L'B',L'&nbsp;',0,L'F',L'C',L'&nbsp;',0,L'F',L'D',L'&nbsp;',0,L'F',L'E',L'&nbsp;',0,L'F',L'F',L'&nbsp;',0&nbsp;}&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;__int64*&nbsp;map_table_64&nbsp;=&nbsp;(__int64*)__map_table_16;<br />#pragma&nbsp;pack()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;OLECHAR*&nbsp;intptr;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;outstring&nbsp;==&nbsp;NULL&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;E_POINTER;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;VariantClear(&nbsp;outstring);<br />&nbsp;&nbsp;&nbsp;&nbsp;outstring-&gt;vt&nbsp;=&nbsp;VT_BSTR;<br />&nbsp;&nbsp;&nbsp;&nbsp;outstring-&gt;bstrVal&nbsp;=&nbsp;SysAllocStringLen(&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;OLECHAR*)NULL,&nbsp;number_of_datas&nbsp;*&nbsp;3);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;intptr&nbsp;=&nbsp;(OLECHAR*)outstring-&gt;bstrVal;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(&nbsp;i&nbsp;=&nbsp;0&nbsp;;&nbsp;i&nbsp;&lt;&nbsp;number_of_datas;&nbsp;++&nbsp;i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((__int64*)intptr)&nbsp;=&nbsp;map_table_64[&nbsp;data[i]&nbsp;&amp;&nbsp;0xff&nbsp;];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intptr&nbsp;+=&nbsp;3;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;S_OK;<br />}</div></div><img src ="http://www.cppblog.com/panchao1987/aggbug/165815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/panchao1987/" target="_blank">panchao</a> 2012-02-17 09:09 <a href="http://www.cppblog.com/panchao1987/articles/165815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>expandstring_internel</title><link>http://www.cppblog.com/panchao1987/articles/165816.html</link><dc:creator>panchao</dc:creator><author>panchao</author><pubDate>Fri, 17 Feb 2012 01:09:00 GMT</pubDate><guid>http://www.cppblog.com/panchao1987/articles/165816.html</guid><wfw:comment>http://www.cppblog.com/panchao1987/comments/165816.html</wfw:comment><comments>http://www.cppblog.com/panchao1987/articles/165816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/panchao1987/comments/commentRss/165816.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/panchao1987/services/trackbacks/165816.html</trackback:ping><description><![CDATA[<div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;we&nbsp;use&nbsp;this&nbsp;so&nbsp;that&nbsp;we&nbsp;can&nbsp;do&nbsp;without&nbsp;the&nbsp;ctype&nbsp;library&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">#define</span>&nbsp;is_digit(c)&nbsp;&nbsp;&nbsp;&nbsp;((c)&nbsp;&gt;=&nbsp;L'0'&nbsp;&amp;&amp;&nbsp;(c)&nbsp;&lt;=&nbsp;L'9')<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;skip_atoi(<span style="color: #0000FF; ">const</span>&nbsp;wchar_t&nbsp;**s)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(is_digit(**s))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;i*10&nbsp;+&nbsp;*((*s)++)&nbsp;-&nbsp;L'0';<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;i;<br />}<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;wchar_t&nbsp;*&nbsp;int_number(wchar_t&nbsp;*&nbsp;str,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;num)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;_itow(num,&nbsp;str,&nbsp;10);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(&nbsp;*str)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;++;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;str;<br />}<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;wchar_t&nbsp;*&nbsp;double_number(wchar_t&nbsp;*&nbsp;str,&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;num)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*s;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;tmp[_CVTBUFSIZE&nbsp;+&nbsp;1];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;_gcvt&nbsp;(&nbsp;num,&nbsp;12,&nbsp;tmp&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(&nbsp;*s&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*str++&nbsp;=&nbsp;*s++;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;str;<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;__stdcall&nbsp;expandstring_internel(&nbsp;wchar_t*&nbsp;buf,&nbsp;wchar_t*&nbsp;fmt,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;VARIANT*&nbsp;args,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;number_of_args)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;wchar_t&nbsp;*str;<br />&nbsp;&nbsp;&nbsp;&nbsp;wchar_t&nbsp;*s;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LONG&nbsp;arg_lbound,&nbsp;arg_ubound;<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;arg_count;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;count&nbsp;of&nbsp;argument&nbsp;int&nbsp;args</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;arg_index;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;buf&nbsp;==&nbsp;NULL&nbsp;||&nbsp;fmt==NULL&nbsp;||&nbsp;(args==NULL&nbsp;&amp;&amp;&nbsp;number_of_args&gt;0))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;arg_lbound&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;arg_count&nbsp;=&nbsp;number_of_args;<br />&nbsp;&nbsp;&nbsp;&nbsp;arg_ubound&nbsp;=&nbsp;arg_lbound&nbsp;+&nbsp;arg_count&nbsp;-&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(str=buf&nbsp;;&nbsp;*fmt;&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(*fmt&nbsp;!=&nbsp;L'%'&nbsp;&amp;&amp;&nbsp;*fmt)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*str++&nbsp;=&nbsp;*fmt++;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;(*fmt)&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++fmt;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;skips&nbsp;first&nbsp;'%'</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*fmt&nbsp;==&nbsp;L'%')&nbsp;{&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;%%</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*str++&nbsp;=&nbsp;L'%';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++fmt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;!&nbsp;is_digit(*fmt))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg_index&nbsp;=&nbsp;skip_atoi(&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;wchar_t&nbsp;**)&nbsp;&amp;fmt)&nbsp;-&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;arg_index&nbsp;&lt;&nbsp;arg_lbound&nbsp;||&nbsp;arg_index&gt;&nbsp;arg_ubound&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;not&nbsp;a&nbsp;valid&nbsp;argument&nbsp;index</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(args[arg_index].vt&nbsp;)&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_I1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;int_number(&nbsp;str,&nbsp;args[arg_index].cVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_I2:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;int_number(&nbsp;str,&nbsp;args[arg_index].iVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_I4:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;int_number(&nbsp;str,&nbsp;args[arg_index].lVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_INT:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;int_number(&nbsp;str,&nbsp;args[arg_index].intVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_UI1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;int_number(&nbsp;str,&nbsp;args[arg_index].bVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_UI2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;int_number(&nbsp;str,&nbsp;args[arg_index].uiVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_UI4:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;int_number(&nbsp;str,&nbsp;args[arg_index].ulVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_UINT:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;int_number(&nbsp;str,&nbsp;args[arg_index].uintVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_R4:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;double_number(&nbsp;str,&nbsp;args[arg_index].fltVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_R8:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;double_number(&nbsp;str,&nbsp;args[arg_index].dblVal);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_BSTR:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;(wchar_t*)args[arg_index].bstrVal;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(&nbsp;*s&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*str++&nbsp;=&nbsp;*s++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;VT_DATE:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*str&nbsp;=&nbsp;L'\0';<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;str-buf;<br />}</div></div><img src ="http://www.cppblog.com/panchao1987/aggbug/165816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/panchao1987/" target="_blank">panchao</a> 2012-02-17 09:09 <a href="http://www.cppblog.com/panchao1987/articles/165816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>render a png file, using libpng1.5.0</title><link>http://www.cppblog.com/panchao1987/articles/165814.html</link><dc:creator>panchao</dc:creator><author>panchao</author><pubDate>Fri, 17 Feb 2012 01:08:00 GMT</pubDate><guid>http://www.cppblog.com/panchao1987/articles/165814.html</guid><wfw:comment>http://www.cppblog.com/panchao1987/comments/165814.html</wfw:comment><comments>http://www.cppblog.com/panchao1987/articles/165814.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/panchao1987/comments/commentRss/165814.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/panchao1987/services/trackbacks/165814.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//&nbsp;这个类用于显示&nbsp;PNG&nbsp;图像//&nbsp;需要&nbsp;png_loader.cc&nbsp;支持。//&nbsp;author:&nbsp;panchao#pra...&nbsp;&nbsp;<a href='http://www.cppblog.com/panchao1987/articles/165814.html'>阅读全文</a><img src ="http://www.cppblog.com/panchao1987/aggbug/165814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/panchao1987/" target="_blank">panchao</a> 2012-02-17 09:08 <a href="http://www.cppblog.com/panchao1987/articles/165814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>