??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品免费区二区三区观看,中文精品视频,亚洲欧美国产精品专区久久http://www.shnenglu.com/mymsdn/MyMSDN记录开发新知道zh-cnSat, 23 Aug 2025 23:04:52 GMTSat, 23 Aug 2025 23:04:52 GMT60关于protobuf中的field_number范围的解?/title><link>http://www.shnenglu.com/mymsdn/archive/2011/03/19/142184.html</link><dc:creator>volnet</dc:creator><author>volnet</author><pubDate>Fri, 18 Mar 2011 18:01:00 GMT</pubDate><guid>http://www.shnenglu.com/mymsdn/archive/2011/03/19/142184.html</guid><wfw:comment>http://www.shnenglu.com/mymsdn/comments/142184.html</wfw:comment><comments>http://www.shnenglu.com/mymsdn/archive/2011/03/19/142184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mymsdn/comments/commentRss/142184.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mymsdn/services/trackbacks/142184.html</trackback:ping><description><![CDATA[<!--MyMSDN style!--><link rel="stylesheet" type="text/css" > <style type="text/css"> body{background-color:#eeeeee;} </style> <div>以下是来自Google Protobuf Documents里的一句话Q?</div> <div id="00000u0" class="quote">As you can see, each field in the message definition has a unique numbered tag. These tags are used to identify your fields in the <a >message binary format</a>, and should not be changed once your message type is in use. Note that tags with values in the range 1 through 15 take one byte to encode. Tags in the range 16 through 2047 take two bytes. So you should reserve the tags 1 through 15 for very frequently occurring message elements. Remember to leave some room for frequently occurring elements that might be added in the future. </div> <div>q里要做一个解释,是Z么是1?5Q以?6?047呢?</div> <div> <ol> <li>1?5Q仅使用1bytes。每个byte包含两个部分Q一个是field_number一个是tagQ其中field-number是protobuf中每个值后{号后的数字Q在C++和Java中,如果不设|这个|则它是随机的Q如果在Python中,不设|,它则不被处理Q这个在<a >message binary format</a>中的Field Order一节中有提刎ͼ(j)。那么我们可以认个field_number是必ȝ。那么一个byte用来表达q个值就?span style="color: red">0</span><span style="color: blue">00000</span><span style="color: green">000</span>Q其中红色表C是否有后箋字节Q如果ؓ(f)0表示没有也就是这是一个字节,蓝色部分表示field-numberQ绿色部分则是wire_type部分Q表C数据类型。也是(field_number << 3) | wire_type。其中wire_type只有3位,表示数据cd。那么能够表Cfield_number的就?位蓝色的数字Q?位数字能够表辄最大范围就?-15Q其?是无效的Q? <li>16?047Q与上面的规则其实类|下面?bytesZ子,那么有<span style="color: red">1</span><span style="color: blue">0000000 <span style="color: red">0</span>0000</span><span style="color: green">000</span>Q其中红色部分依然是W号位,因ؓ(f)每个byte的第一位都用来表示下一byte是否和自己有养I那么对于>1byte的数据,W一位一定是1Q因里假设是2byteQ那么第二个byte的第一位也是红Ԍ刨除q两位,再扣?个wire_type位,剩下11位(2*8-2-3Q,能够表达的数字范围就?047Q?<sup>11</sup>Q?/li></ol></div> <div> 参考资料:(x)<br /> <ol><li>http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/proto.html</li> <li>http://code.google.com/apis/protocolbuffers/docs/encoding.html</li></ol> </div><img src ="http://www.shnenglu.com/mymsdn/aggbug/142184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mymsdn/" target="_blank">volnet</a> 2011-03-19 02:01 <a href="http://www.shnenglu.com/mymsdn/archive/2011/03/19/142184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zig-zag~码方式http://www.shnenglu.com/mymsdn/archive/2011/03/19/zig-zag-encoding.htmlvolnetvolnetFri, 18 Mar 2011 16:36:00 GMThttp://www.shnenglu.com/mymsdn/archive/2011/03/19/zig-zag-encoding.htmlhttp://www.shnenglu.com/mymsdn/comments/142182.htmlhttp://www.shnenglu.com/mymsdn/archive/2011/03/19/zig-zag-encoding.html#Feedback0http://www.shnenglu.com/mymsdn/comments/commentRss/142182.htmlhttp://www.shnenglu.com/mymsdn/services/trackbacks/142182.htmlhttp://goo.gl/2wRKb
用位q算来表C把一个负数{换成zig-zag~码Q就?span class="pun">

int32是:(x)(n << 1) ^ (n >> 31)
int64是:(x)(n << 1) ^ (n >> 63)
也就是说Q如果是负数Q对?2位最多能省去30|其中1格是W号位,另一个代表最?Q此处假?#8220;正负0”不合法)(j)。同理,64位最多能省去62位。当然比较极端的是所有的位数都被用上了?br>



volnet 2011-03-19 00:36 发表评论
]]>
IsWow64q不能用来检是否是Windows 32bitpȝq是64bitpȝhttp://www.shnenglu.com/mymsdn/archive/2010/09/06/125966.htmlvolnetvolnetSun, 05 Sep 2010 18:06:00 GMThttp://www.shnenglu.com/mymsdn/archive/2010/09/06/125966.htmlhttp://www.shnenglu.com/mymsdn/comments/125966.htmlhttp://www.shnenglu.com/mymsdn/archive/2010/09/06/125966.html#Feedback12http://www.shnenglu.com/mymsdn/comments/commentRss/125966.htmlhttp://www.shnenglu.com/mymsdn/services/trackbacks/125966.html如何当前操作pȝ是不?4位?如何判断当前应用E序是否在Wow64下运行?

首先什么是Wow64Q很多朋友一看到64p个方法是判断当前pȝ是否?4bit的,其实不然。Wow64是Windows-On-Windows64的意思,它是指在64位的操作pȝ上(不是?4位的CPUQ运?2位应用程序的兼容q_?/p>

下面是MSDN中一DIsWow64的应用程序:(x)

BOOL IsWow64() 
{ 
    typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); 
    LPFN_ISWOW64PROCESS fnIsWow64Process; 
    BOOL bIsWow64 = FALSE; 
    fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(_T("kernel32")), "IsWow64Process"); 
    if (NULL != fnIsWow64Process) 
    {
        fnIsWow64Process(GetCurrentProcess(),&bIsWow64); 
    } 
    return bIsWow64; 
}

下面的代码用来检这个程序的l果Q?/p>

if( IsWow64() == TRUE )
{
    _tprintf(_T("IsWow64() == TRUE\n"));
}
else
{
    _tprintf(_T("IsWow64() == FALSE\n"));
}

让我们编译一下这个程序?/p>

我们需要的?4位的操作pȝQ比如XP64bitQW(xu)indows 2008 R2{都?4bit操作pȝ?/p>

?4位的操作pȝ上运行的kernel32.dll中,会(x)实现IsWow64ProcessҎ(gu)Q而在32位系l中提供的kernel32.dll中则没有提供相关函数的实现?/p>

比较qh人的则是bIsWow64Q其实仔l看MSDN中的RemarkQ会(x)发现Q?/p>

If the application is a 64-bit application running under 64-bit Windows, the Wow64Process parameter is set to FALSE.也就是说64位应用程序跑?4位的操作pȝ上,bIsWow64的值将是FALSE而不是TRUE?

因此我们需要分别将我们的程序编译成Win32q_和x64q_的,如果你用Visual Studioq行~译Q默认安装则只包?2位的~译?链接器,即便你是?4位操作系l上安装Q也是一L(fng)。你需要在VC++节点下勾选x64选项才可以,Itanium则需要在Serverq_下安装才可勾选。然后在~译的时候,分别选择Win32和x64q行~译?

image

~译后,q行Q结果如我们分析的一P(x)

?4位系l上q行W(xu)in32~译配置的结果是IsWow64() == TRUEQ而x64~译配置的结果是IsWow64() == FALSE?

如果惌知道当前pȝ是否?4位的Q则可以通过下面的方法:(x)

BOOL Is64bitSystem()
{
    SYSTEM_INFO si;
    GetNativeSystemInfo(&si);

    if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||    
        si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    } 
}

注意Q需要注意是GetNativeSystemInfo  函数从Windows XP 开始才有, ?IsWow64Process  函数?Windows XP with SP2 以及(qing) Windows Server 2003 with SP1 开始才有?



volnet 2010-09-06 02:06 发表评论
]]>
q?amp;reg; 多线E应用开发指?/title><link>http://www.shnenglu.com/mymsdn/archive/2010/09/05/125912.html</link><dc:creator>volnet</dc:creator><author>volnet</author><pubDate>Sat, 04 Sep 2010 18:20:00 GMT</pubDate><guid>http://www.shnenglu.com/mymsdn/archive/2010/09/05/125912.html</guid><wfw:comment>http://www.shnenglu.com/mymsdn/comments/125912.html</wfw:comment><comments>http://www.shnenglu.com/mymsdn/archive/2010/09/05/125912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mymsdn/comments/commentRss/125912.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mymsdn/services/trackbacks/125912.html</trackback:ping><description><![CDATA[     摘要: http://software.intel.com/zh-cn/articles/intel-guide-for-developing-multithreaded-applications/ q?dng)?多线E应用开发指?提交新文? Published On :  2010q?2?5?20:00 评 L(fng)录后评Q当前分敎ͼ(x) 0 ?0 用户 L(fng)录后评Q当前分敎ͼ(x) 0 ...  <a href='http://www.shnenglu.com/mymsdn/archive/2010/09/05/125912.html'>阅读全文</a><img src ="http://www.shnenglu.com/mymsdn/aggbug/125912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mymsdn/" target="_blank">volnet</a> 2010-09-05 02:20 <a href="http://www.shnenglu.com/mymsdn/archive/2010/09/05/125912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于宏MAX_PATH与文件名长度的关p?/title><link>http://www.shnenglu.com/mymsdn/archive/2010/09/04/125870.html</link><dc:creator>volnet</dc:creator><author>volnet</author><pubDate>Sat, 04 Sep 2010 05:59:00 GMT</pubDate><guid>http://www.shnenglu.com/mymsdn/archive/2010/09/04/125870.html</guid><wfw:comment>http://www.shnenglu.com/mymsdn/comments/125870.html</wfw:comment><comments>http://www.shnenglu.com/mymsdn/archive/2010/09/04/125870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mymsdn/comments/commentRss/125870.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mymsdn/services/trackbacks/125870.html</trackback:ping><description><![CDATA[<p>目的Q测试MAX_PATH路径与文件名的关pR?/p> <p>l论QMAX_PATH代表从盘W开始到文g名结C字符串长度(长度+1Q的最大长度。也是假设C:\a.txt?个字W,长度?QMAX_PATH通常?60Q其中这个文件全名的长度不能大于260?/p> <p>试代码Q?/p> <p><a href="http://www.shnenglu.com/images/cppblog_com/mymsdn/WindowsLiveWriter/253adb4ca2e0_C354/image_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.shnenglu.com/images/cppblog_com/mymsdn/WindowsLiveWriter/253adb4ca2e0_C354/image_thumb.png" width="702" height="468"></a></p><pre class="gc-code"><span style="color: blue">#include </span><span style="color: #a31515">"stdafx.h" </span><span style="color: blue">#include </span><span style="color: #a31515"><atlbase.h> </span><span style="color: blue">#include </span><span style="color: #a31515"><windows.h> </span><span style="color: blue">#include </span><span style="color: #a31515"><atlfile.h> </span><span style="color: blue">#include </span><span style="color: #a31515"><atlstr.h> </span><span style="color: blue">#include </span><span style="color: #a31515"><iostream> </span><span style="color: blue">#include </span><span style="color: #a31515"><string> </span><span style="color: #010001">BOOL IsFileExist</span>( <span style="color: #010001">LPCTSTR lpszFileName </span>) { <span style="color: #010001">DWORD dwAttr </span>= ::<span style="color: #010001">GetFileAttributes</span>( <span style="color: #010001">lpszFileName </span>); <span style="color: blue">if </span>( <span style="color: #010001">dwAttr </span>== 0xFFFFFFFF ) { <span style="color: blue">return </span><span style="color: #010001">FALSE</span>; } <span style="color: blue">if </span>( ( <span style="color: #010001">dwAttr </span>& <span style="color: #010001">FILE_ATTRIBUTE_DIRECTORY </span>) > 0 ) { <span style="color: blue">return </span><span style="color: #010001">FALSE</span>; } <span style="color: blue">return </span><span style="color: #010001">TRUE</span>; } <span style="color: #010001">BOOL DeleteFiles</span>( <span style="color: #010001">LPCTSTR lpszPath </span>) { <span style="color: #010001">TCHAR szFrom</span>[<span style="color: #010001">_MAX_PATH</span>+1] = {<span style="color: #010001">_T</span>( <span style="color: #a31515">'\0' </span>)}; <span style="color: #010001">lstrcpy</span>( <span style="color: #010001">szFrom </span>, <span style="color: #010001">lpszPath </span>); <span style="color: #010001">SHFILEOPSTRUCT shf</span>; <span style="color: #010001">memset</span>( &<span style="color: #010001">shf</span>, 0, <span style="color: blue">sizeof</span>( <span style="color: #010001">SHFILEOPSTRUCT </span>) ); <span style="color: #010001">shf</span>.<span style="color: #010001">hwnd </span>= <span style="color: #010001">NULL</span>; <span style="color: #010001">shf</span>.<span style="color: #010001">pFrom </span>= <span style="color: #010001">szFrom</span>; <span style="color: #010001">shf</span>.<span style="color: #010001">wFunc </span>= <span style="color: #010001">FO_DELETE</span>; <span style="color: #010001">shf</span>.<span style="color: #010001">fFlags </span>= <span style="color: #010001">FOF_NOCONFIRMMKDIR </span>| <span style="color: #010001">FOF_NOCONFIRMATION </span>| <span style="color: #010001">FOF_NOERRORUI </span>| <span style="color: #010001">FOF_SILENT</span>; <span style="color: blue">return </span><span style="color: #010001">SHFileOperation</span>( &<span style="color: #010001">shf </span>) == 0; } <span style="color: #010001">BOOL WriteBinaryBytesToFile</span>( <span style="color: #010001">LPCTSTR fileName</span>, <span style="color: blue">unsigned char</span>* <span style="color: #010001">data</span>, <span style="color: blue">unsigned int </span><span style="color: #010001">datasize </span>, <span style="color: #010001">BOOL bAppend </span>) { <span style="color: #010001">CAtlFile file</span>; <span style="color: blue">if</span>( !<span style="color: #010001">bAppend </span>&& <span style="color: #010001">IsFileExist</span>( <span style="color: #010001">fileName </span>)) <span style="color: #010001">DeleteFiles</span>( <span style="color: #010001">fileName </span>); <span style="color: #010001">HRESULT ret </span>= <span style="color: #010001">file</span>.<span style="color: #010001">Create</span>( <span style="color: #010001">fileName</span>, <span style="color: #010001">FILE_WRITE_DATA</span>, <span style="color: #010001">FILE_SHARE_WRITE</span>, <span style="color: #010001">bAppend</span>?<span style="color: #010001">OPEN_ALWAYS</span>:<span style="color: #010001">CREATE_ALWAYS </span>); <span style="color: blue">if </span>( !<span style="color: #010001">SUCCEEDED</span>( <span style="color: #010001">ret </span>) ) <span style="color: blue">return </span><span style="color: #010001">FALSE</span>; <span style="color: blue">if</span>( <span style="color: #010001">bAppend </span>) { <span style="color: #010001">file</span>.<span style="color: #010001">Seek</span>( 0, <span style="color: #010001">FILE_END </span>); } <span style="color: blue">unsigned char </span>*<span style="color: #010001">pos </span>= <span style="color: #010001">data</span>; <span style="color: blue">while</span>( <span style="color: #010001">datasize </span>> 0 ) { <span style="color: #010001">DWORD dwWrite </span>= 0; <span style="color: blue">if </span>( <span style="color: #010001">file</span>.<span style="color: #010001">Write</span>( <span style="color: #010001">pos </span>, <span style="color: #010001">datasize </span>, &<span style="color: #010001">dwWrite </span>) != <span style="color: #010001">S_OK </span>) { <span style="color: #010001">file</span>.<span style="color: #010001">Close</span>(); <span style="color: blue">return </span><span style="color: #010001">FALSE</span>; } <span style="color: #010001">datasize </span>-= <span style="color: #010001">dwWrite</span>; <span style="color: #010001">pos </span>+= <span style="color: #010001">dwWrite</span>; } <span style="color: #010001">file</span>.<span style="color: #010001">Close</span>(); <span style="color: blue">return </span><span style="color: #010001">TRUE</span>; } <span style="color: #010001">BOOL GCreateFile</span>(<span style="color: #010001">std</span>::<span style="color: #010001">string</span>& <span style="color: #010001">fileNamePath</span>, <span style="color: #010001">std</span>::<span style="color: #010001">string</span>& <span style="color: #010001">fileNameExt</span>, <span style="color: blue">int </span><span style="color: #010001">shortNameLength</span>, <span style="color: #010001">std</span>::<span style="color: #010001">string</span>& <span style="color: #010001">data</span>) { <span style="color: blue">char </span><span style="color: #010001">c</span>[] = <span style="color: #a31515">"a"</span>; <span style="color: #010001">std</span>::<span style="color: #010001">string fileName</span>; <span style="color: #010001">fileName</span>.<span style="color: #010001">append</span>(<span style="color: #010001">fileNamePath</span>); <span style="color: blue">while</span>( <span style="color: #010001">shortNameLength</span>-- ) { <span style="color: #010001">fileName</span>.<span style="color: #010001">append</span>(<span style="color: #010001">c</span>); ++*<span style="color: #010001">c</span>; <span style="color: blue">if</span>( *<span style="color: #010001">c </span>> <span style="color: #a31515">'z' </span>) { *<span style="color: #010001">c </span>= <span style="color: #a31515">'a'</span>; } } <span style="color: #010001">fileName</span>.<span style="color: #010001">append</span>(<span style="color: #010001">fileNameExt</span>); <span style="color: #010001">std</span>::<span style="color: #010001">cout </span><< <span style="color: #a31515">"fileName:" </span><< <span style="color: #010001">fileName </span><< <span style="color: #010001">std</span>::<span style="color: #010001">endl</span>; <span style="color: #010001">std</span>::<span style="color: #010001">cout </span><< <span style="color: #a31515">"fileName.size():"</span><< <span style="color: #010001">fileName</span>.<span style="color: #010001">size</span>() << <span style="color: #010001">std</span>::<span style="color: #010001">endl</span>; <span style="color: #010001">std</span>::<span style="color: #010001">cout </span><< <span style="color: #a31515">"MAX_PATH" </span><< <span style="color: #010001">MAX_PATH </span><< <span style="color: #010001">std</span>::<span style="color: #010001">endl</span>; <span style="color: blue">if</span>( <span style="color: #010001">WriteBinaryBytesToFile</span>(<span style="color: #010001">fileName</span>.<span style="color: #010001">c_str</span>(), (<span style="color: blue">unsigned char</span>*)<span style="color: #010001">data</span>.<span style="color: #010001">data</span>(), <span style="color: #010001">data</span>.<span style="color: #010001">size</span>(), <span style="color: #010001">FALSE </span>) ) { <span style="color: #010001">std</span>::<span style="color: #010001">cout </span><< <span style="color: #a31515">"++++++++++++++WriteBinaryBytesToFile successful.++++++++++++++" </span><< <span style="color: #010001">std</span>::<span style="color: #010001">endl</span>; <span style="color: blue">return </span><span style="color: #010001">TRUE</span>; } <span style="color: blue">else </span>{ <span style="color: #010001">std</span>::<span style="color: #010001">cout </span><< <span style="color: #a31515">"==============WriteBinaryBytesToFile error==============." </span><< <span style="color: #010001">std</span>::<span style="color: #010001">endl</span>; <span style="color: blue">return </span><span style="color: #010001">FALSE</span>; } } <span style="color: blue">int </span><span style="color: #010001">_tmain</span>(<span style="color: blue">int </span><span style="color: #010001">argc</span>, <span style="color: #010001">_TCHAR</span>* <span style="color: #010001">argv</span>[]) { <span style="color: #010001">std</span>::<span style="color: #010001">string fileNamePath </span>= <span style="color: #a31515">"E:\\MyCPlusProject\\TestFileNameMaxLength\\TestFileNameMaxLength\\Output\\"</span>; <span style="color: #010001">std</span>::<span style="color: #010001">string fileNameExt </span>= <span style="color: #a31515">".txt"</span>; <span style="color: #010001">std</span>::<span style="color: #010001">string data</span>(<span style="color: #a31515">"This is a content."</span>); <span style="color: blue">int </span><span style="color: #010001">shortNameLength</span>; <span style="color: #010001">shortNameLength </span>= <span style="color: #010001">MAX_PATH </span>- <span style="color: #010001">fileNameExt</span>.<span style="color: #010001">size</span>() - <span style="color: #010001">fileNamePath</span>.<span style="color: #010001">size</span>(); <span style="color: #010001">GCreateFile</span>(<span style="color: #010001">fileNamePath</span>, <span style="color: #010001">fileNameExt</span>, <span style="color: #010001">shortNameLength</span>, <span style="color: #010001">data</span>); <span style="color: #010001">std</span>::<span style="color: #010001">cout </span><< <span style="color: #a31515">"------------------" </span><< <span style="color: #010001">std</span>::<span style="color: #010001">endl</span>; <span style="color: #010001">shortNameLength </span>= <span style="color: #010001">MAX_PATH </span>- <span style="color: #010001">fileNameExt</span>.<span style="color: #010001">size</span>() - <span style="color: #010001">fileNamePath</span>.<span style="color: #010001">size</span>() - 1; <span style="color: #010001">GCreateFile</span>(<span style="color: #010001">fileNamePath</span>, <span style="color: #010001">fileNameExt</span>, <span style="color: #010001">shortNameLength</span>, <span style="color: #010001">data</span>); <span style="color: blue">return </span>0; }</pre> <p>提示Q右键项目属性,字W集讄为“未讄”?/p><img src ="http://www.shnenglu.com/mymsdn/aggbug/125870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mymsdn/" target="_blank">volnet</a> 2010-09-04 13:59 <a href="http://www.shnenglu.com/mymsdn/archive/2010/09/04/125870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q程间窗体置?/title><link>http://www.shnenglu.com/mymsdn/archive/2010/09/04/125866.html</link><dc:creator>volnet</dc:creator><author>volnet</author><pubDate>Sat, 04 Sep 2010 04:41:00 GMT</pubDate><guid>http://www.shnenglu.com/mymsdn/archive/2010/09/04/125866.html</guid><wfw:comment>http://www.shnenglu.com/mymsdn/comments/125866.html</wfw:comment><comments>http://www.shnenglu.com/mymsdn/archive/2010/09/04/125866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mymsdn/comments/commentRss/125866.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mymsdn/services/trackbacks/125866.html</trackback:ping><description><![CDATA[<p>最q遇C个跟WindowsQ不是指操作pȝQ而是一?:CreateWindow的结果)(j)有关的问题?/p> <p>情况是这L(fng)Q通常的应用程序内的事件传递一般场景都是类似在H体A上点?yn)L?Q弹Z个窗体B。面对这L(fng)场景只要::SetWindowActive(HWND wnd)卛_Q这里其实有个隐含的前提Q就是wnd的父H口是出于TOP的状态,也就是它的父H口是置的Q也是我们能够在界面上看到它,否则你的其他|顶H口依旧置?/p> <p>下面的代码示意了如何窗口置Ӟ因ؓ(f)也没有对各个Ҏ(gu)做深入分析,所以就不多发表aZQ?/p><pre class="gc-code"><span style="color: green">/*场景Q? 目标Q将子窗口放到置Ӟ且是HWND_TOPQ模? 说明QhMainWnd是主H口Qm_pMMessageWnd->m_hWnd是子H口 */ /*1、将H口从后台直接提到最前方Q需要先主HUM来?/ </span><span style="color: #010001">HWND hMainWnd </span>= <span style="color: #010001">CFramework</span>::<span style="color: #010001">GetInstance</span>()-><span style="color: #010001">GetMainWnd</span>(); <span style="color: blue">if</span>( <span style="color: #010001">hMainWnd </span>!= <span style="color: #010001">NULL </span>) { <span style="color: #010001">SetForegroundWindow</span>(<span style="color: #010001">hMainWnd</span>); <span style="color: #010001">BringWindowToTop</span>(<span style="color: #010001">hMainWnd</span>); <span style="color: #010001">SetActiveWindow</span>(<span style="color: #010001">hMainWnd</span>); <span style="color: #010001">SetWindowPos</span>( <span style="color: #010001">hMainWnd</span>, <span style="color: #010001">HWND_TOPMOST</span>, 0, 0, 0, 0, <span style="color: #010001">SWP_NOMOVE</span>|<span style="color: #010001">SWP_NOSIZE</span>|<span style="color: #010001">SWP_SHOWWINDOW </span>); } <span style="color: green">/*2、将子窗口置?/ </span><span style="color: blue">if</span>( <span style="color: #010001">m_pMMessageWnd </span>!= <span style="color: #010001">NULL </span>) <span style="color: green">/* true */ </span>{ <span style="color: #010001">SetForegroundWindow</span>(<span style="color: #010001">m_pMMessageWnd</span>-><span style="color: #010001">m_hWnd</span>); <span style="color: #010001">BringWindowToTop</span>(<span style="color: #010001">m_pMMessageWnd</span>-><span style="color: #010001">m_hWnd</span>); <span style="color: #010001">SetActiveWindow</span>(<span style="color: #010001">m_pMMessageWnd</span>-><span style="color: #010001">m_hWnd</span>); <span style="color: #010001">SetWindowPos</span>( <span style="color: #010001">m_pMMessageWnd</span>-><span style="color: #010001">m_hWnd</span>, <span style="color: #010001">HWND_TOPMOST</span>, 0, 0, 0, 0, <span style="color: #010001">SWP_NOMOVE</span>|<span style="color: #010001">SWP_NOSIZE</span>|<span style="color: #010001">SWP_SHOWWINDOW </span>); <span style="color: #010001">SetWindowPos</span>( <span style="color: #010001">m_pMMessageWnd</span>-><span style="color: #010001">m_hWnd</span>, <span style="color: #010001">HWND_NOTOPMOST</span>, 0, 0, 0, 0, <span style="color: #010001">SWP_NOMOVE</span>|<span style="color: #010001">SWP_NOSIZE</span>|<span style="color: #010001">SWP_SHOWWINDOW </span>); } <span style="color: green">/*3、放在后面的原因是避免子H口q未弹出Q点ȝ体外的时候被攑ֈ后面去,所以等H口出来后再取消|顶*/ </span><span style="color: blue">if</span>( <span style="color: #010001">hMainWnd </span>!= <span style="color: #010001">NULL </span>) { <span style="color: #010001">SetWindowPos</span>( <span style="color: #010001">hMainWnd</span>, <span style="color: #010001">HWND_NOTOPMOST</span>, 0, 0, 0, 0, <span style="color: #010001">SWP_NOMOVE</span>|<span style="color: #010001">SWP_NOSIZE</span>|<span style="color: #010001">SWP_SHOWWINDOW </span>); } <span style="color: green">/*4、避免被ȝ口给压了*/ </span><span style="color: blue">if</span>( <span style="color: #010001">m_pMMessageWnd </span>!= <span style="color: #010001">NULL </span>) <span style="color: green">/* true */ </span>{ <span style="color: #010001">SetWindowPos</span>( <span style="color: #010001">m_pMMessageWnd</span>-><span style="color: #010001">m_hWnd</span>, <span style="color: #010001">HWND_TOPMOST</span>, 0, 0, 0, 0, <span style="color: #010001">SWP_NOMOVE</span>|<span style="color: #010001">SWP_NOSIZE</span>|<span style="color: #010001">SWP_SHOWWINDOW </span>); <span style="color: #010001">SetWindowPos</span>( <span style="color: #010001">m_pMMessageWnd</span>-><span style="color: #010001">m_hWnd</span>, <span style="color: #010001">HWND_NOTOPMOST</span>, 0, 0, 0, 0, <span style="color: #010001">SWP_NOMOVE</span>|<span style="color: #010001">SWP_NOSIZE</span>|<span style="color: #010001">SWP_SHOWWINDOW </span>); } </pre><img src ="http://www.shnenglu.com/mymsdn/aggbug/125866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mymsdn/" target="_blank">volnet</a> 2010-09-04 12:41 <a href="http://www.shnenglu.com/mymsdn/archive/2010/09/04/125866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]C/C++中动态链接库的创建和调用http://www.shnenglu.com/mymsdn/archive/2010/08/28/124983.htmlvolnetvolnetFri, 27 Aug 2010 16:30:00 GMThttp://www.shnenglu.com/mymsdn/archive/2010/08/28/124983.htmlhttp://www.shnenglu.com/mymsdn/comments/124983.htmlhttp://www.shnenglu.com/mymsdn/archive/2010/08/28/124983.html#Feedback1http://www.shnenglu.com/mymsdn/comments/commentRss/124983.htmlhttp://www.shnenglu.com/mymsdn/services/trackbacks/124983.html转蝲自:(x)http://developer.51cto.com/art/200702/39608.htm

动态连接库的创建步骤:(x)

一、创建Non-MFC DLL动态链接库

1、打开File ?gt; New ?gt; Project选项Q选择Win32 Dynamic-Link Library ?gt;sample project ?gt;工程名:(x)DllDemo

2、新Z?h文gDllDemo.h

#ifdef DllDemo_EXPORTS
#define DllAPI __declspec(dllexport)
#else
#define DllAPI __declspec(dllimport)
extern "C" //原样~译
{
DllAPI int __stdcall Max(int a,int b); //__stdcall佉KC/C++语言内能够调用API
}
#endif

3、在DllDemo.cpp文g中导入DllDemo.h文gQƈ实现Max(int,int)函数

#include "DllDemo.h"
DllAPI int __stdcall Max(int a,int b)
{
if(a==b)
return NULL;
else if(a>b)
return a;
else
return b;
}

4、编译程序生成动态连接库

二、用.def文g创徏动态连接库DllDemo.dll

1、删除DllDemo工程中的DllDemo.h文g?

2、在DllDemo.cpp文g_(d)删除 #include DllDemo.h语句?

3、向该工E中加入一个文本文Ӟ命名为DllDemo.defq写入如下语句:(x)

LIBRARY MyDll

EXPORTS

Max@1

4、编译程序生成动态连接库?

动态链接的调用步骤Q?/strong>

一、隐式调?/strong>

1、徏立DllCnslTest工程

2、将文gDllDemo.dll、DllDemo.lib拯到DllCnslTest工程所在的目录

3、在DllCnslTest.h中添加如下语句:(x)

#define DllAPI __declspec(dllimport)
#pragma comment(libQ?DllDemo.lib") //在编辑器linkӞ链接到DllDemo.lib文g
extern "C"
{
DllAPI int __stdcall Max(int a,int b);
}

4、在DllCnslTest.cpp文g中添加如下语句:(x)

#include "DllCnslTest.h"http://或?#include "DllDemo.h"
void main()
{
int value;
value = Max(2,9);
printf("The Max value is %d\n",value);
}

5、编译ƈ生成应用E序DllCnslTest.exe

二、显式调?/strong>

1、徏立DllWinTest工程?

2、将文gDllDemo.dll拯到DllWinTest工程所在的目录或Windowspȝ目录下?

3、用vc/bin下的Dumpbin.exe的小E序Q查看DLL文g(DllDemo.dll)中的函数l构?

4、用类型定义关键字typedefQ定义指向和DLL中相同的函数原型指针?

例:(x)

typedef int(*lpMax)(int a,int b); //此语句可以放?h文g?/p>

5、通过LoadLibray()DLL加蝲到当前的应用E序中ƈq回当前DLL文g的句柄?

例:(x)

HINSTANCE hDll; //声明一个Dll实例文g句柄
hDll = LoadLibrary("DllDemo.dll");//导入DllDemo.dll动态连接库

6、通过GetProcAddress()函数获取导入到应用程序中的函数指针?

例:(x)

lpMax Max;
Max = (lpMax)GetProcAddress(hDLL,"Max");
int value;
value = Max(2,9);
printf("The Max value is %d",value);

7、函数调用完毕后Q用FreeLibrary()卸蝲DLL文g?pre>

FreeLibrary(hDll);

8、编译ƈ生成应用E序DllWinTest.exe

注:(x)昑ּ链接应用E序~译时不需要用相应的Lib文g?/p>

下蝲Q?font style="background-color: #cccccc">Visual Studio 2008验证通过Q:(x)http://www.shnenglu.com/Files/mymsdn/DllCnsTest.7z



volnet 2010-08-28 00:30 发表评论
]]>
两个有用的宏Q?amp;ldquo;止cL员复?amp;rdquo;以及(qing)&ldquo;止隐式构?amp;rdquo;http://www.shnenglu.com/mymsdn/archive/2010/08/11/123003.htmlvolnetvolnetTue, 10 Aug 2010 16:34:00 GMThttp://www.shnenglu.com/mymsdn/archive/2010/08/11/123003.htmlhttp://www.shnenglu.com/mymsdn/comments/123003.htmlhttp://www.shnenglu.com/mymsdn/archive/2010/08/11/123003.html#Feedback1http://www.shnenglu.com/mymsdn/comments/commentRss/123003.htmlhttp://www.shnenglu.com/mymsdn/services/trackbacks/123003.html止cL员复Ӟ其核心就在于不允许类外部看见复制函数Q包?#8220;拯构造函?#8221;?#8220;operator =重蝲”?/p>
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
private:                     \
TypeName(const TypeName&);               \
TypeName& operator=(const TypeName&)
止隐式构造,则可以将默认构造函数隐藏v来,在大多数~译器中也可以对构造函数增加explicit关键字来避免隐式构造?
#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \
private:                     \
TypeName();                                    \
DISALLOW_COPY_AND_ASSIGN(TypeName)
更多解释详见《More Effective C++?

volnet 2010-08-11 00:34 发表评论
]]>
[C++]__declspec关键?/title><link>http://www.shnenglu.com/mymsdn/archive/2010/07/22/121059.html</link><dc:creator>volnet</dc:creator><author>volnet</author><pubDate>Thu, 22 Jul 2010 12:46:00 GMT</pubDate><guid>http://www.shnenglu.com/mymsdn/archive/2010/07/22/121059.html</guid><wfw:comment>http://www.shnenglu.com/mymsdn/comments/121059.html</wfw:comment><comments>http://www.shnenglu.com/mymsdn/archive/2010/07/22/121059.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/mymsdn/comments/commentRss/121059.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mymsdn/services/trackbacks/121059.html</trackback:ping><description><![CDATA[<p><span style="color: blue">__declspec</span>关键?/p><pre class="gc-code"><span style="color: green">// keyword__declspec.cpp : 定义控制台应用程序的入口炏V? // // ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/kernel_d/hh/Kernel_d/64bitAMD_6db3322a-fe6d-4287-9eda-a9c1378e715d.xml.htm // The sizeof value for any structure is the offset of the final member, // plus that member's size, rounded up to the nearest multiple of the largest // member alignment value or the whole structure alignment value, // whichever is greater. </span><span style="color: blue">#include </span><span style="color: #a31515">"stdafx.h" </span><span style="color: blue">__declspec</span>( <span style="color: blue">align</span>( 32) ) <span style="color: blue">struct </span><span style="color: #010001">Struct__declspec_1 </span>{ <span style="color: blue">int </span><span style="color: #010001">a</span>; <span style="color: blue">int </span><span style="color: #010001">b</span>; }; <span style="color: blue">__declspec</span>( <span style="color: blue">align</span>( 32) ) <span style="color: blue">struct </span><span style="color: #010001">Struct__declspec_2 </span>{ <span style="color: blue">__declspec</span>( <span style="color: blue">align</span>( 64) ) <span style="color: blue">int </span><span style="color: #010001">a</span>; <span style="color: blue">int </span><span style="color: #010001">b</span>; }; <span style="color: blue">__declspec</span>( <span style="color: blue">align</span>( 8 ) ) <span style="color: blue">struct </span><span style="color: #010001">Struct__declspec_3 </span>{ <span style="color: blue">int </span><span style="color: #010001">a</span>; <span style="color: green">//4 bytes </span><span style="color: blue">int </span><span style="color: #010001">b</span>; <span style="color: green">//4 bytes </span><span style="color: blue">int </span><span style="color: #010001">c</span>; <span style="color: green">//4 bytes </span>}; <span style="color: blue">__declspec</span>( <span style="color: blue">align</span>( 8 ) ) <span style="color: blue">struct </span><span style="color: #010001">Struct__declspec_4 </span>{ <span style="color: blue">int </span><span style="color: #010001">a</span>; <span style="color: green">//4 bytes </span><span style="color: blue">int </span><span style="color: #010001">b</span>; <span style="color: green">//4 bytes </span>}; <span style="color: blue">struct </span><span style="color: #010001">StructNormal </span>{ <span style="color: blue">int </span><span style="color: #010001">a</span>; <span style="color: green">//4 bytes </span><span style="color: blue">int </span><span style="color: #010001">b</span>; <span style="color: green">//4 bytes </span><span style="color: blue">int </span><span style="color: #010001">c</span>; <span style="color: green">//4 bytes </span>}; <span style="color: blue">int </span><span style="color: #010001">_tmain</span>(<span style="color: blue">int </span><span style="color: #010001">argc</span>, <span style="color: #010001">_TCHAR</span>* <span style="color: #010001">argv</span>[]) { <span style="color: #010001">printf</span>( <span style="color: #a31515">"sizeof Struct__declspec_1 is %d.\n"</span>, <span style="color: blue">sizeof</span>( <span style="color: #010001">Struct__declspec_1 </span>)); <span style="color: green">//32 </span><span style="color: #010001">printf</span>( <span style="color: #a31515">"sizeof Struct__declspec_2 is %d.\n"</span>, <span style="color: blue">sizeof</span>( <span style="color: #010001">Struct__declspec_2 </span>)); <span style="color: green">//64 </span><span style="color: #010001">printf</span>( <span style="color: #a31515">"sizeof Struct__declspec_3 is %d.\n"</span>, <span style="color: blue">sizeof</span>( <span style="color: #010001">Struct__declspec_3 </span>)); <span style="color: green">//16 </span><span style="color: #010001">printf</span>( <span style="color: #a31515">"sizeof Struct__declspec_4 is %d.\n"</span>, <span style="color: blue">sizeof</span>( <span style="color: #010001">Struct__declspec_4 </span>)); <span style="color: green">//8 </span><span style="color: #010001">printf</span>( <span style="color: #a31515">"sizeof StructNormal is %d.\n"</span>, <span style="color: blue">sizeof</span>( <span style="color: #010001">StructNormal </span>)); <span style="color: green">//12 </span><span style="color: blue">return </span>0; } </pre><img src ="http://www.shnenglu.com/mymsdn/aggbug/121059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mymsdn/" target="_blank">volnet</a> 2010-07-22 20:46 <a href="http://www.shnenglu.com/mymsdn/archive/2010/07/22/121059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[C++]内存理Q?Q?/title><link>http://www.shnenglu.com/mymsdn/archive/2010/07/06/memory_manager-1.html</link><dc:creator>volnet</dc:creator><author>volnet</author><pubDate>Tue, 06 Jul 2010 14:45:00 GMT</pubDate><guid>http://www.shnenglu.com/mymsdn/archive/2010/07/06/memory_manager-1.html</guid><wfw:comment>http://www.shnenglu.com/mymsdn/comments/119492.html</wfw:comment><comments>http://www.shnenglu.com/mymsdn/archive/2010/07/06/memory_manager-1.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.shnenglu.com/mymsdn/comments/commentRss/119492.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mymsdn/services/trackbacks/119492.html</trackback:ping><description><![CDATA[     摘要: 和大多数内存理的初衷一_(d)希望能够控制内存分配和回Ӟ减少内存片Q且通常q样的内存都?x)预开一D连l内存空_(d)然后我们自己来管理这D内存。当焉常q样的需求都很合理,但是实现h则通常不能完美Q比如:(x)效率、算法的选择、如何减内存碎片、跟t管理内存分配、性能(g)、对pȝ内存使用的统计、垃圑֛收等。下面是我近期实现的一个非常简陋的E序Q甚臛_能连基本的要求都无法辑ֈQ大家帮忙看看,它究竟有多少~点...  <a href='http://www.shnenglu.com/mymsdn/archive/2010/07/06/memory_manager-1.html'>阅读全文</a><img src ="http://www.shnenglu.com/mymsdn/aggbug/119492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mymsdn/" target="_blank">volnet</a> 2010-07-06 22:45 <a href="http://www.shnenglu.com/mymsdn/archive/2010/07/06/memory_manager-1.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.leathvx.cn" target="_blank">ŷպþþƷ</a>| <a href="http://www.dlhybjgs.cn" target="_blank">þˬˬˬ</a>| <a href="http://www.5748l.cn" target="_blank">þþžоƷ23ٻӰԺ</a>| <a href="http://www.fuxingjidian.cn" target="_blank">þþþһvr </a>| <a href="http://www.hybdh.cn" target="_blank">þþþ?V</a>| <a href="http://www.zusang.cn" target="_blank">ŷþһ</a>| <a href="http://www.990w.cn" target="_blank">AVһþ</a>| <a href="http://www.zfrnhbv.com.cn" target="_blank">ƷëƬþþþþþ</a>| <a href="http://www.888su.cn" target="_blank">˾þۺӰԺ</a>| <a href="http://www.bkkg.net.cn" target="_blank">޾þһ</a>| <a href="http://www.aboto.cn" target="_blank">þþƷһӰԺ</a>| <a href="http://www.szsdhy.cn" target="_blank">ҹþþþ</a>| <a href="http://www.hoolhooy.cn" target="_blank">þù</a>| <a href="http://www.wwohui.cn" target="_blank">һþaþþƷۺҹҹ</a>| <a href="http://www.ssc905.cn" target="_blank">ŷ˼Ծþ</a>| <a href="http://www.hycv.cn" target="_blank">Ļav鲻þ </a>| <a href="http://www.dewy.com.cn" target="_blank">ƷѾþþþӰԺ</a>| <a href="http://www.020xyk.cn" target="_blank">ƷþþþþĻ</a>| <a href="http://www.fujianedu.com.cn" target="_blank">þ߿߿</a>| <a href="http://www.santai58.cn" target="_blank">þþƷƷëƬ</a>| <a href="http://www.mashar.cn" target="_blank">޹Ʒþ</a>| <a href="http://www.v0008.cn" target="_blank">þѿaëƬ</a>| <a href="http://www.sccdseo.cn" target="_blank">þþۺϾɫۺ̾</a>| <a href="http://www.dt175.cn" target="_blank">޹Ʒһþ</a>| <a href="http://www.chipsummit.cn" target="_blank">Ʒʾþþþ999Ұ </a>| <a href="http://www.fujianedu.com.cn" target="_blank">Ӱһþҹײ </a>| <a href="http://www.vcdordvd.cn" target="_blank">þþþ</a>| <a href="http://www.gallery2.cn" target="_blank">˾þô߽AVۺӰԺ </a>| <a href="http://www.fifacn.cn" target="_blank">ɫþþۺ</a>| <a href="http://www.68002.com.cn" target="_blank">þɫһ</a>| <a href="http://www.fimtb.cn" target="_blank">ھƷþþþӰԺվ</a>| <a href="http://www.grayhound.cn" target="_blank">Ʒ99þþþþ</a>| <a href="http://www.iscrip.cn" target="_blank">þ99Ʒþþþþþò</a>| <a href="http://www.sevengreen.cn" target="_blank">þþƷˬӰ</a>| <a href="http://www.dykh-tech.cn" target="_blank">ɫþþþþۺ</a>| <a href="http://www.fbnnfzx.cn" target="_blank">ŷһþþ</a>| <a href="http://www.hearingaids.net.cn" target="_blank">ղƷaëƬþ</a>| <a href="http://www.zuiaimama.cn" target="_blank">þþþùƷ鶹ARӰԺ </a>| <a href="http://www.wshoponlinet.cn" target="_blank">þѾDzݲƷ</a>| <a href="http://www.1758c.cn" target="_blank">þþƷ</a>| <a href="http://www.coscoshuai.cn" target="_blank">97þþþ޾Ʒר </a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>