??xml version="1.0" encoding="utf-8" standalone="yes"?>久久99精品久久久久子伦,久久精品国产免费观看三人同眠,国产午夜精品理论片久久影视 http://m.shnenglu.com/xmli/category/11063.htmlぷ雪飘绛梅映D红 <br>
は舞霜飞映苍松<br> ----- Do more,suffer less zh-cn Sat, 11 Jun 2011 09:34:56 GMT Sat, 11 Jun 2011 09:34:56 GMT 60 VC/MFC之ListCtrl控g使用l验ȝ(? http://m.shnenglu.com/xmli/archive/2011/06/11/148482.html李现?/dc:creator>李现?/author>Sat, 11 Jun 2011 03:57:00 GMT http://m.shnenglu.com/xmli/archive/2011/06/11/148482.html http://m.shnenglu.com/xmli/comments/148482.html http://m.shnenglu.com/xmli/archive/2011/06/11/148482.html#Feedback 0 http://m.shnenglu.com/xmli/comments/commentRss/148482.html http://m.shnenglu.com/xmli/services/trackbacks/148482.html 阅读全文 ]]> c语言 printf()输出格式控制(? http://m.shnenglu.com/xmli/archive/2011/06/09/148330.html李现?/dc:creator>李现?/author>Thu, 09 Jun 2011 03:59:00 GMT http://m.shnenglu.com/xmli/archive/2011/06/09/148330.html http://m.shnenglu.com/xmli/comments/148330.html http://m.shnenglu.com/xmli/archive/2011/06/09/148330.html#Feedback 0 http://m.shnenglu.com/xmli/comments/commentRss/148330.html http://m.shnenglu.com/xmli/services/trackbacks/148330.html 1Q{换说明符 %a(%A) 点数、十六进制数字和p-(P-)记数?C99) %c 字符 %d 有符号十q制整数 %f 点?包括float和doulbe) %e(%E) 点数指数输出[e-(E-)记数法] %g(%G) 点C显无意义的零"0" %i 有符号十q制整数(?d相同) %u 无符号十q制整数 %o 八进制整?nbsp; e.g. 0123 %x(%X) 十六q制整数0f(0F) e.g. 0x1234 %p 指针 %s 字符?br /> %% "%"
2Q标?br /> 左对齐:"-" e.g. "%-20s" 叛_齐:"+" e.g. "%+20s" I格Q若W号为正Q则昄I格Q负则显C?-" e.g. "% 6.2f" #Q对c,s,d,ucL影响Q对oc,在输出时加前~oQ对xc,在输出时加前~0xQ?br /> 对e,g,f cdl果有小数时才给出小数点?/span>
3Q格式字W串Q格式) QL志]Q输出最宽度]Q._ֺQE长度Q类?br /> "Q?md" Q左寚wQ若m比实际少Ӟ按实际输出?br /> "%m.ns"Q输出m位,取字W串(左v)n位,左补I格Q当n>m or m省略时m=n e.g. "%7.2s" 输入CHINA 输出" CH" "%m.nf"Q输出QҎ(gu)Qm为宽度,n为小数点双C e.g. "%3.1f" 输入3852.99 输出3853.0 长度Qؓh短整Ş?lؓ长整形量
]]> 游戏客户端与~辑器代码重用设计杂?/title> http://m.shnenglu.com/xmli/archive/2010/12/10/136043.html李现?/dc:creator>李现?/author>Fri, 10 Dec 2010 04:28:00 GMT http://m.shnenglu.com/xmli/archive/2010/12/10/136043.html http://m.shnenglu.com/xmli/comments/136043.html http://m.shnenglu.com/xmli/archive/2010/12/10/136043.html#Feedback 2 http://m.shnenglu.com/xmli/comments/commentRss/136043.html http://m.shnenglu.com/xmli/services/trackbacks/136043.html 游戏客户端与~辑?/span>代码?span lang="zh-CN">?/span>设计杂谈
版本Q?font face="Times New Roman, serif">0.1
最后修改:2010-12-10
撰写Q李现民
引言
很多游戏都有配套的编辑器Q或通用或专用,q样可以方便{划及时设计、修Ҏ(gu)戏数据。当一个游戏方案确认实施时Q如果需要设计配套编辑器Q那么它往往先于游戏本n而设计。出于代码重用和方便l护的需要,大部分核心代码会在游戏客L与编辑器中同时用,因此有效提取q部分共用代码ƈ量减少与项目其它部分的耦合成计的重点?/p>
关于良好E序架构设计的话题,比如设计模式、领域驱动设计等Q相兌著恒x数。本文结合实践中遇到的问题,从工具与技术相l合的角度来阐述相关问题的解x案?/p>
以下假定E序q行环境?font face="Times New Roman, serif">VC6+XP。从本文撰写旉看(2010-12-10 Q,VC6 无论如何都不是一个好的选择Q但限于W者所在公司环境如此,所以只好将q来了?font face="Times New Roman, serif">(╯▽??/font>?/p>
使用宏控制代码生成策?/h1>
管我们q求代码的可重用性,但实际情况往往q不如人意Q特别是在与特定于游戏客LQ?/span>或编辑器Q?/span>的功能相l合比较紧密?span lang="zh-CN">代码 部分?/span>比如UI Q?span lang="zh-CN">界面 Q,游戏客户?/span>中有独立的界面模块,而编辑器界面可能 使用MFC 制作。即使同一个函数接口,游戏客户端与~辑器所需要的功能也可能是不一LQ这是因为它们拥有各自不同的应用們Q游戏客L們于游戏画质更加qxQ而编辑器则需要考虑{划人员快速的~辑修改数据Q再比如游戏客户端可能需要网l?/span>IO 功能Q而编辑器则一般不需要?/span>
宏(具体的说Q?/span>C++ 中的宏)Q此时可能是一U比较合适的工具。比如,通过在游戏客L与编辑器中定义不同的宏变量,可以使游戏客L专用的网l?/span>IO 代码在编辑器中根本不生成?/span>
某些情况下可能需要在同一个项目下建立多个configurations Q配|)Q通过定义不同的宏变量以控制生成不同版本的E序Q比如:化版、完整版、内部版{?/font>?/p>
宏在VC 环境中有大量的应用案例,比如windows.h 头文件中定义了大量的宏用于控制不同环境下的代码生成策略?/p>
使用函数控制代码生成{略q信?/span>~译?span lang="zh-CN">优化
宏控制的原理是将不需要的代码当作注释直接U除Q因此编 译器不会d查该部分代码的正性。这在某些情况下是必ȝ Q比如编辑器没有|络 IO 相关的代码接口,因此相关代码必须被清除,否则~辑器项目将无法正确~译?/span>
但宏控制有自q问题Q?/p>
宏变量通常定义?font face="Times New Roman, serif">Project
Settings
Q工E设|)中,因此不容易记忆或查找Q?/p>
IDE 工具通常无法像支持代码一h持此cd变量的快速查找,特别是存在多个项目相互引用的复杂工程中(比如Visual
Assist X ?font face="Times New Roman, serif">Find
Reference功能Q可以快速搜索到所有引用指定变量或函数的代码,但此功能不支持在Project
Settings 中定义的宏变量)Q?/p>
~译器无法审查被U除部分代码的正性,q可能导致一些代码修改同步的问题?/p>
针对q些问题Q笔者的解决Ҏ(gu)是:宏控制变量只使用一ơ,用于定义一个简单函敎ͼ而该函数q回当前宏控制变量的存在情况Q其它原本用宏控制变量的地斚w改ؓ使用q个函数判断。这?font color="#800000">间接的将宏变量控制{换ؓ函数控制Q从而获?font face="Times New Roman, serif">IDE工具支持与编译器代码审查的双重好?/font>?/p>
比如如下代码Q?/p>
namespace
edition { #ifdef
_EDITOR inline
bool
IsEditor ()
{ return
true ;
} #else inline
bool
IsEditor ()
{ return
false ;
} #endif } void
Print () { if
( edition :: IsEditor ()) { puts ( "This
is editor" ); } else { puts ( "This
is not editor" ); } }
宏变?font face="Times New Roman, serif">_EDITOR
只用一ơ,其余地方都?font face="Times New Roman, serif">edition :: IsEditor () 区分是编辑器代码q是游戏客户端代码?/p>
h意,我们q不会有M的运行期性能损失Q虽然看hq如此。由于在~译?font face="Times New Roman, serif">edition :: IsEditor () 的值是定的,因此当打开优化时编译器会移除不可达代码Q从而得C宏控制情况下相同的可执行文g 。当Ӟ?font face="Times New Roman, serif">Debug版本下(优化关闭Q所有的代码都被~译生成到最l可执行文g中,但我猜?zhn)应该不会?font face="Times New Roman, serif">Debug版本l最l用户用对吧?
使用delegate 解?/h1>
?/span>MVC 架构下,使用 Observer Q观察者)模式核心逻辑代码?/span>UI 界面代码分离g天经C的事Q这样做的好处是核心逻辑代码可以独立?/span>UI 代码而存在,从而达到重用的目的。但不幸的是Q从W者经手的代码看,很多E序员ƈ没有注意到这一炏V主要问题可能包括以下两个方面:
W一是核心逻辑代码?font face="Times New Roman, serif">UI界面代码怺调用关系错综复杂。由于核心逻辑代码不独立,因而很难进行提取复用。这U情늛Ҏ(gu)较常见?/p>
W二个问题解释v来可能更复杂一些。由于缺乏从核心逻辑代码?font face="Times New Roman, serif">UI界面代码的回调机ӞE序员可能会被迫使用一些极端的手法来达C指定事件是否发生的目的。比如,我们知道游戏客户端都有一个主循环main_loop Q方法名U通常?font face="Times New Roman, serif">Update()?font face="Times New Roman, serif">Tick()Q用于更新每一帧的游戏动画。这ӞE序员可能会在该循环中埋伏一些代码以侦测核心逻辑状态的变化情况Q从而达到触发事件的目的。这U手法实C功能Q保持了低耦合Q却降低了代码执行效率?/p>
q两个问题的解决之道在于观察者模式。这个模式在实现上还是比较复杂的Q对每一个要处理事g都需要定义对应的观察者与被观察者接口。这U代码复杂性曾使很多h望而却步(包括本h-___- Q,为此java 中内|了java.util.Observer ?font face="Times New Roman, serif">java.util.Observable接口Q以降低使用该模式的代h(hun)?/p>
W者徏议的Ҏ(gu)是?/span>delegate Q委托)。没错,是那个 C# 中的 delegate Q它能够极低的设计复杂度实现与观察者模式相同的解耦效果。具体实例这里不再列举,因ؓ|上可以扑ֈ很多。如果你使用的是 C# Q那么你是幸q的Q如果你使用的是 C++ Q那么网上同样可以找到设计好的仿真类库;如果你不q怋用了 VC6 Qƈ且实在找到出路了Q那么同学你也许可以d考一下我的另一文章?/span>VC6 中简?/span>delegate 实现》,或许会有点帮助?/span>
l语
本来q想加点静态变量与通用工厂的话题的Q但我发?/span>meyers
singleton ?/span>VC6 中的某种应用模式下会问题Q?/span>singleton 对象的构造函C被调用两ơ, T__T Q,因此先欠着账,{待下次有成熟方案的时候再说吧。不q对此问题诸位看官如果有相关宝贵l验的话不妨提携一二,感激不尽中?/span>
]]>关于帔R折叠(? http://m.shnenglu.com/xmli/archive/2010/11/23/134425.html李现?/dc:creator>李现?/author>Tue, 23 Nov 2010 13:24:00 GMT http://m.shnenglu.com/xmli/archive/2010/11/23/134425.html http://m.shnenglu.com/xmli/comments/134425.html http://m.shnenglu.com/xmli/archive/2010/11/23/134425.html#Feedback 0 http://m.shnenglu.com/xmli/comments/commentRss/134425.html http://m.shnenglu.com/xmli/services/trackbacks/134425.html 首先来看一个例子:
int main(int argc, char* argv[]) { const int i=0; int *j = (int *) &i; *j=1; cout<<&i<<endlcout<<j<<endl; cout<<i<<endl; cout<<*j<<endl; return 0; }
l果?/p>
0012ff7c 0012ff7c
0
1
因ؓi和j都指向相同的内存地址Q所以输出的前两个结果是相同的,但ؓ啥相同的内存里的l果不相同么Q-Q这是帔R折叠.
q个"帔R折叠"?是在编译器q行语法分析的时候,常量表辑ּ计算求|q用求得的值来替换表达式,攑օ帔R表。可以算作一U编译优化?br>我只是改了这个地址内容,但是iq是0,
因ؓ~译器在优化的过E中Q会把碰见的const全部以内Ҏ(gu)换掉Q跟宏似? #define pi 3.1415,用到pi时就?.1415代替Q,q个出现在预~译阶段Q但是在q行阶段Q它的内存里存的东西实改变?!!
6.|上的一些问题(4Q?/p>
关于帔R
q些天被帔R的一些概忉|着,现在l于有些明白了,
问题始于const int i = 10;//i存在哪,10存在?/p>
说明一Q符可
q个语句是对i的声明,因ؓ~译器一开始就知道i的|所以以后出现i时就会用10代替Q这好像叫做W号表的概念Qi对?0了?/p>
|上一帖子上有这L代码Q?/p>
const int a = 3;
int *p = const_cast<int *>(&a);
*p = 4;
cout << a;//仍然输出3
q个l果可以用上面的说明来解?/p>
说明二:帔R折叠Qconst foldingQ与复写传播 (copy propagation)
|上Z普遍反映thinking in c++const folding译ؓ帔R折叠是种误导Q我觉得译的q行Q本来folding有折叠的意思,是把原来的东西变小Q而象const int i = 2*2;~译器确实将2*2成4了,以后到iq4替换Q这个计?*2的过E据说叫帔R折叠--const foldingQ而用4替换i的过E叫做复写传?-copy propagation.他们都是~译器的优化技?/p>
说明三:为常量分配空?/p>
补充一下,q里说的都是const 定义的常量,而非文字帔RQ?/p>
Qc++ primer译成文字常?-literal constant
the c++ programming languageQtcplQ翻译成文字量,q分了不同类型)
至于文字帔R存在哪,c++ primer 3ed上说它们是不可寻址?-nonaddressableQ尽它们也存在机器内存某个地方Q但无法讉K它们的地址
对于int double{类型还好理解,但是对于字符串常量(tcpl里说字W串文字量作为常量,利于存储与访问时的优化)下面的代码似乎表C字W串帔R存储在静态存储区里(字符串文字量是静态分配的--tcplQ,那么字符串常量的地址不是可以讉K了吗Q在静态存储区?/p>
http://bbs.bc-cn.net/dispbbs.asp?boardid=56&replyi ...
字符串文字量的类型是帔R字符数组--适当个数的const字符的数l?/p>
//有关字符帔R的存储区的问?/p>
//另外Qchar a[]和char *a的区?/p>
//"hello world 1"存在?br>#include <iostream> using namespace std; int main() {
char* p = "hello world1"Q?br>char a[] = "hello world2"Q?br>//会ؓa在栈上分?3个字节的I间 // p[2] = a; a[2] = a; char* p1 = "hello world1" printf("%xn",&p[2]);//p应该指向帔R?br>printf("%x",&a[2]);//栈上数组W三个元素的地址 return 0; //l果42f036 //q是帔R?br>//12ff6e果然不一Pq是栈区 }
6.ȝ
那么"帔R折叠"到底是啥意思呢Q?/p>
我理解,单的说就是,当编译器处理const的时候,~译器会其变成一个立x?/p>
《thinking in c++》里面说q一点在数组定义里尤光?为啥呢?没有查到相关的资??/p>
Technorati : Zoundary , test , 帔R折叠
]]> 如何通过E序屏蔽windows_滞键之热键 http://m.shnenglu.com/xmli/archive/2010/03/04/108880.html李现?/dc:creator>李现?/author>Thu, 04 Mar 2010 05:36:00 GMT http://m.shnenglu.com/xmli/archive/2010/03/04/108880.html http://m.shnenglu.com/xmli/comments/108880.html http://m.shnenglu.com/xmli/archive/2010/03/04/108880.html#Feedback 0 http://m.shnenglu.com/xmli/comments/commentRss/108880.html http://m.shnenglu.com/xmli/services/trackbacks/108880.html 大家都知道,在windows下默认连击shift键到5ơ会弹出_滞键设|的对话框,如下图所C?br> 在游戏中必须屏蔽windows对粘滞键热键的反应,否则游戏体验会非常差。在|上查找一D|间后发现Q关于如何通过E序屏蔽_滞键热键的中文资料非常,大多数的{案都是打开“控制面板”Q然后找?#8220;辅助功能选项”条目云云Q这昄不是E序员所需要的解决手法?br> l过多方查找Q问题最l得以解冟뀂下面列表代码,以飨未来者,E序VC6.0+XPpȝ下运行通过?br>
// activate or inactivate sticky keys hot key (pop up a set up dialog after continually pressed shift 5 times) bool ActivateStickyHotkey( bool isActivate, bool * pIsPreviouslyActivate = NULL) { // fetch current sticky keys state STICKYKEYS skf; const DWORD datasize = sizeof (STICKYKEYS); skf.cbSize = datasize; if ( ! SystemParametersInfo(SPI_GETSTICKYKEYS, datasize, (LPVOID) & skf, 0 )) { return false ; } const bool isPreviouslyActivate = (skf.dwFlags & SKF_HOTKEYACTIVE) != 0 ; // store old sticky keys state if (NULL != pIsPreviouslyActivate) { * pIsPreviouslyActivate = isPreviouslyActivate; } // return true if no need to change state if (isActivate == isPreviouslyActivate) { return true ; } // change sticky keys state skf.dwFlags = isActivate ? (skf.dwFlags | SKF_HOTKEYACTIVE) : (skf.dwFlags & ( ~ SKF_HOTKEYACTIVE)); const bool isSuccess = TRUE == SystemParametersInfo(SPI_SETSTICKYKEYS, datasize, (LPVOID) & skf, 0 ); return isSuccess; }
参考资料: 1, http://msdn.microsoft.com/en-us/library/aa925903.aspx 2, http://stackoverflow.com/questions/734618/disabling-accessibility-shortcuts-in-net-application
]]> W号文g——Windows 应用E序调试必备 http://m.shnenglu.com/xmli/archive/2009/09/15/96258.html李现?/dc:creator>李现?/author>Tue, 15 Sep 2009 10:26:00 GMT http://m.shnenglu.com/xmli/archive/2009/09/15/96258.html http://m.shnenglu.com/xmli/comments/96258.html http://m.shnenglu.com/xmli/archive/2009/09/15/96258.html#Feedback 0 http://m.shnenglu.com/xmli/comments/commentRss/96258.html http://m.shnenglu.com/xmli/services/trackbacks/96258.html
W号文g——Windows 应用E序调试必备
作者:Generad USam
一、何谓符hӞ
W号文gQSymbol
FilesQ是一个数据信息文Ӟ它包含了应用E序二进制文Ӟ比如QEXE、DLL{)调试信息Q专门用来作调试之用Q最l生成的可执行文件在q行时ƈ
不需要这个符hӞ但你的程序中所有的变量信息都记录在q个文g中。所以调试应用程序时Q这个文件是非常重要的。用 Visual C++ ?
WinDbg 调试E序旉要用到这个文件?br>
?Windows pȝ中,W号文g?.pdb 为扩展名Q比如:每个 Windows 操作pȝ下有一?GDI32.dll
文gQ编译器在编译该 DLL 的时候会产生一?GDI32.pdb 文gQ一旦你拥有了这?PDB 文gQ那么便可以用它来调试ƈ跟踪?
GDI32.dll 内部。该文g和二q制文g的编译版本密切相养I比如修改?DLL 的输出函敎ͼ再编译该 DLLQ那么原先的 PDB
文gp时了Q不能再用老的 PDB 文g来做调试工作,而必M用最新的 PDB 文g版本?br>
Visual C++ ~译代码后会?Debug 或?Release 目录下生成一?PDB
文g。一般情况下Q符h件包括以下的数据信息Q?/p>
全局变量QGlobal variablesQ;
局部变量(Local variablesQ;
函数名和它们的入口地址QFunction names and the addresses of their entry
pointsQ;
FPO 数据QFrame Pointer Omission)QFrame Pointer 是一U用来在调用堆栈QCall
stackQ中扑ֈ下一个将要被调用的函数的数据l构源代码的行序PSource-line numbersQ;
二、如何得到和安装W号文g?
先确定你的操作系l(OSQ版本;
到微软网站下载相应的W号文gQ?/li>
安装W号文gQ对于符h件的安装位置没有特贝要求Q可以安装在M目录中;
讄环境变量Q得调试工P比如QVisual C++、WinDbg、Ntsd、DrWatson {)能找到符hӞ
安装W号文g的注意事:
如果是手动安装符hӞ有一点很重要Q那是宿主机(Hostt ComputerQ上的符h件必M目标机器QTarget
ComputerQ上?Windows 版本相匹配?br>
q里所谓的宿主机指的是q行调试会话的机器,在典型的双系l调试会话环境中Q宿L可以是连接到目标机器的Q何机器。目标机器指的是发生软glg、系
l服务、应用程序或操作pȝq行p|的机器。也x需要被调试的机器,它是调试会话x的焦炏V目标机器可以近在咫,也可以位于完全不同的地方。有时我
们也目标机器称之ؓ——被调试者(debuggeeQ,那么与之对应Q宿L则可以称试者(debuggerQ?/p>
三、在 Visual C++ 使用W号文g的方?/strong>
?Visual C++ 6.0 中的使用Ҏ(gu)Q?/p>
打开 Visual C++ 6.0 ?Workspace 文gQ?.dswQ;
q入 Tools 菜单Q选择 Options 菜单?(Tools->Options)Q?/li>
单击 Directoties 标签Q?/li>
?“Show directories for”下拉列表中选择 “Executable files”Q?/li>
符h件的路径d?“Directories” 路径列表中;
单击 OK 完成Q?/li>
?Visual C++ .NET 2003 中的使用Ҏ(gu)Q?/p>
打开 Visual C++ .NET 的项目文Ӟ*.vcprojQ;
在解x案管理器中选中要用符h件的目Q?/li>
单击右键q入目属性对话框Q?/li>
选择“配置属?#8221;中的“调试”Q?/li>
在与“调试”对应?#8220;操作”选项中有一?#8220;W号路径”Q在此添加符h件的路径卛_Q?/li>
单击 “定” 完成Q?/li>
四、如何?Release 版本二进制文件对应的 PDB 文g?
?Visual C++ 6.0 中的Ҏ(gu)Q?/p>
打开 Visual C++ 6.0 ?Workspace 文gQ?.dswQ;
q入 Project 菜单Q选择 Settings 菜单?(Project->Settings)Q打开目讄对话框;
?“Settings for”列表中选择目?Release 配置Q?/li>
单击“C/C++”标签Q?/li>
?#8220;Category”下拉列表框中选择“General”选项Q?/li>
?#8220;Debug info”下拉列表框中选择调试信息格式Q具体选项参见图一Q,在此不必用M优化选项Q?/li>
单击“Link”标签Q?/li>
?#8220;Category”下拉列表框中选择“Debug”选项Q?/li>
选中“Debug info”复选框Q然后选择需要的链接调试cdQ具体选项参见图一Q;
不要选择“Separate types”复选框Q?/li>
?#8220;Project options”~辑框的最后添加如下指令:/opt:ref,icfQ?/li>
重新生成QRebuildQ项目;
?Visual C++ .NET 2003 中的Ҏ(gu)Q?/p>
打开 Visual C++ .NET 的项目文Ӟ*.vcprojQ;
q入 Project 菜单Q选择 Settings 菜单?(Project->Settings)Q打开目讄对话框;
?“配置”下拉列表中选择目?“Q活动)Release” 配置Q?/li>
选择“配置属?#8221;树型节点中的“C/C++” ==?#8220;常规”Q?/li>
讄双?#8220;调试信息格式”选项Q具体选项参见图一Q;
选择“配置属?#8221;树型节点中的“链接?#8221;==?#8220;调试”Q?/li>
讄双?#8220;生成E序数据库文?#8221;Q具体选项参见图一Q;
选择“配置属?#8221;树型节点中的“链接?#8221;==?#8220;命o?#8221;Q?/li>
?#8220;附加选项(D)”~辑框中d如下指oQ?opt:ref,icfQ?/li>
?#8220;定”退出;
重新生成QRebuildQ项目;
图一
五、关?Free BuildQ也U?Retail BuildQ和 Checked BuildQ也U?Debug BuildQ?/strong>
每个Z NT 操作pȝ有两U不同的E序生成模式Q即Q?/p>
Free Build (?Retail Build)
Checked Build (?Debug Build)
Free Build
生成的是最l用L本,针对生成的二q制文gq行了彻底的优化Q禁用了调试断言Qƈ剥离了调试信息。这样一来可执行程序文件更,加蝲更快Q用的内存也更?br>
Checked Build 生成的是试和调试版本。它包含额外?Free Build 所没有的错误检查,参数验证和调试信息,Checked
Build 有助于隔d跟踪可能D不可预见的行为的问题Q比如内存溢出,不正的讑֤配置。虽?Checked Build
提供了额外的保护Q但?Free Build
比较Q它需要更多的内存开销和磁盘空间。由于可执行E序包含W号调试信息Q调试时要执行附加的代码、参数检查和输出调试诊断信息Q从而导致性能下降?br>
六、系l符h件的更新Ҏ(gu)
pȝW号文g?Windows 操作pȝ依赖的那几个重要?DLL/SYS
和可执行文g对应的符hӞ常见的比如:gdi32.dll、Kernel32.dll、Kerberos.dll、psapi.dll、user32.dll{,使用
WinDbg 调试Ӟ你就会发现系l符h?PDB)有多重要Q这些文仉与本地的 OS 密切相关Q比如,Windows 2000
打了SP补丁的话Q那么必L新系l符h件才能进行相兌试,原来的符h件与打补丁后的系l就会不匚wQ怎么办呢?
可以通过|络来更斎ͼ象下面这样在 WinDbg ?Symbols Path 里面输入路径Q?/p>
SRV*D:\Symbols\websymbols* http://msdl.microsoft.com/download/symbols
Q斜体部分是你在本地保存W号文g的\径)
如果你不是通过代理上网Q那么在你用 WinDbg 打开一个被调试E序后,输入 symchk 回RQWinDbg
׃自动的连到微软的|站Ҏ(gu)你的机器的情冉|新的 PDB
文gQƈ它保存在上面斜体部分指定的本地路径里,q样你就可以保你的W号文g版本和你机器上的文g版本一致?br>
如果你是通过代理上网那么你需要配|?IE 的连接设|。具体方法恕不赘a?br> ]]> 如何通过打印Z|络名称获取其IP地址 http://m.shnenglu.com/xmli/archive/2009/09/02/95104.html李现?/dc:creator>李现?/author>Wed, 02 Sep 2009 07:51:00 GMT http://m.shnenglu.com/xmli/archive/2009/09/02/95104.html http://m.shnenglu.com/xmli/comments/95104.html http://m.shnenglu.com/xmli/archive/2009/09/02/95104.html#Feedback 3 http://m.shnenglu.com/xmli/comments/commentRss/95104.html http://m.shnenglu.com/xmli/services/trackbacks/95104.html 1、如何根据网l打印机的名字,获取该打印机的IPQ?br> 2、如何从shd文g获取打印相关的信息; 问题一?#8220;查找|络上服务器的ip地址”是相同的问题Q比如查找g.cn的ip地址。以下假定网l打印机名称?\\printer"Q则可通过以下代码获取其ip地址?br>
#include < iostream > #include < WinSock2.h > #pragma comment(lib, " Ws2_32 " ) int main( int argc, char * argv[]) { WSADATA wsaData; const int err_code = WSAStartup(MAKEWORD( 2 , 2 ), & wsaData); if ( 0 == err_code) { hostent * pHost = gethostbyname( " printer " ); if (NULL != pHost) { sockaddr_in sa; for ( int i = 0 ; pHost -> h_addr_list[i]; ++ i) { memcpy( & sa.sin_addr.s_addr, pHost -> h_addr_list[i], pHost -> h_length); std::cout << " IP= " << inet_ntoa(sa.sin_addr) << std::endl; } } } system( " pause " ); return 0 ; }
问题二尚无头l,借宝地问一下各位前辈有没有知道解决Ҏ(gu)的?谢谢啦! ]]> 文g多w项更改后刷新的问题 http://m.shnenglu.com/xmli/archive/2009/07/03/89152.html李现?/dc:creator>李现?/author>Fri, 03 Jul 2009 05:03:00 GMT http://m.shnenglu.com/xmli/archive/2009/07/03/89152.html http://m.shnenglu.com/xmli/comments/89152.html http://m.shnenglu.com/xmli/archive/2009/07/03/89152.html#Feedback 1 http://m.shnenglu.com/xmli/comments/commentRss/89152.html http://m.shnenglu.com/xmli/services/trackbacks/89152.html 参考链接如下: 三问文g多w项更改后刷新的问题http://topic.csdn.net/u/20081121/11/f5034a2f-26ae-4f74-a357-1fbd33576883.html 再问文g多w项更改后刷新的问题 http://topic.csdn.net/u/20081108/18/ab4009f0-bfd1-4af6-873d-06ec7837236a.html 在程序中怎么调用讄文g多w项的功能? http://topic.csdn.net/u/20081104/11/b79c58c2-7887-4144-87d0-e9486685cb87.html 实现代码如下Q?br>
bool ShowAllFilesInExplorer( bool isShowHidden /* 对应[昄所有的文g和文件夹] */ , bool isShowSysProtected /* 对应[昄受操作系l保护的文g] */ , bool isShowFileExt /* 对应[隐藏已知文gcd的扩展名] */ ) { HKEY hKey = { 0 }; bool bRet = true ; if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, TEXT( " Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced " ), 0 , KEY_SET_VALUE, & hKey)) { DWORD dwShowHidden = isShowHidden ? 1 : 2 ; DWORD dwShowSysProtected = isShowSysProtected ? 1 : 0 ; DWORD dwShowFileExt = isShowFileExt ? 0 : 1 ; if (ERROR_SUCCESS != ::RegSetValueEx(hKey, TEXT( " Hidden " ), 0 , REG_DWORD, (LPBYTE) & dwShowHidden, (DWORD) sizeof (dwShowHidden)) || ERROR_SUCCESS != ::RegSetValueEx(hKey, TEXT( " ShowSuperHidden " ), 0 , REG_DWORD, (LPBYTE) & dwShowSysProtected, (DWORD) sizeof (dwShowSysProtected)) || ERROR_SUCCESS != ::RegSetValueEx(hKey, TEXT( " HideFileExt " ), 0 , REG_DWORD, (LPBYTE) & dwShowFileExt, (DWORD) sizeof (dwShowFileExt))) { bRet = false ; } ::RegCloseKey(hKey); } else { bRet = false ; } if (bRet) { ::SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0 , (LPARAM)TEXT( " ShellState " ), SMTO_ABORTIFHUNG, 3000 , NULL); ::SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); } return bRet; }
]]> vc中bool与BOOL的区?/title> http://m.shnenglu.com/xmli/archive/2009/07/03/89138.html李现?/dc:creator>李现?/author>Fri, 03 Jul 2009 01:48:00 GMT http://m.shnenglu.com/xmli/archive/2009/07/03/89138.html http://m.shnenglu.com/xmli/comments/89138.html http://m.shnenglu.com/xmli/archive/2009/07/03/89138.html#Feedback 0 http://m.shnenglu.com/xmli/comments/commentRss/89138.html http://m.shnenglu.com/xmli/services/trackbacks/89138.html
BOOL是微软定义的typedef int
BOOL。与bool不同Q它是一个三值逻辑QTRUE/FALSE/ERRORQ返回gؓ>0的整CؓTRUEQ?为FALSEQ?1?
ERROR。Win32 API中很多返回gؓBOOL的函数都是三值逻辑。比如GetMessage().
bool是标准C 数据cdQ可取值true和false?/p>
Ҏ(gu)布尔cd的语义,零gؓ“?#8221;Q记为FALSEQ,M非零值都?#8220;?#8221;Q记为TRUEQ。TRUE的值究竟是什么ƈ没有l一的标准。例如Visual C TRUE定义?Q而Visual Basic则将TRUE定义?1?
假设布尔变量名字为flagQ它与零值比较的标准if语句如下Q?
if (flag) // 表示flag为真
if (!flag) // 表示flag为假
其它的用法都属于不良风格Q例如:
if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)
]]>
99þĻ |
þþŮһ |
þþƷ |
þþƷ99͵ |
þþƷ99þþ㽶 |
?VþþƷ |
þþƷ |
2020¾þþӾƷ
|
þþƷav |
þֻ⾫Ʒ99 |
þþƷѹۿ |
äv뾫Ʒþþ |
˳ɾƷþþþ |
þҹƷƬ |
þþþĻɫ |
þþþ߽ۺϳ |
þùҹƵ |
պƷþþվ |
ŷҹAŴƬþ
|
ݺۺϾþAVһ
|
պʮ˽һþ |
¾þþþa |
þþƷƷʢۿ |
Ʒþþþþ
|
ۺϾþþþ |
AV12þ |
þպƬ |
þֻ⾫Ʒ99 |
þۺ¶þü |
þùƷþ |
þþƷֻоƷ2020 |
˾þô߽avһ |
þþƵ |
þþƷަvDz
|
Ʒ˾þþ |
˾þһWWW |
ۿ ۺϾþþþùɫ ŷ һ
|
þþƷվ |
ղƷþþþþþ |
þþƷ}Ů |
պƷþþվ |