<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>紫罗兰茶馆</title><link>http://blog.vckbase.com/lishengg_blog/</link><description>lishengg的紫罗兰茶馆</description><managingEditor>lishengg的紫罗兰茶馆</managingEditor><dc:language>af</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>lishengg的紫罗兰茶馆</dc:creator><title>win 2K professional 启动错误</title><link>http://blog.vckbase.com/lishengg_blog/archive/2005/01/17/2627.html</link><pubDate>Mon, 17 Jan 2005 02:50:00 GMT</pubDate><guid>http://blog.vckbase.com/lishengg_blog/archive/2005/01/17/2627.html</guid><wfw:comment>http://blog.vckbase.com/lishengg_blog/comments/2627.html</wfw:comment><comments>http://blog.vckbase.com/lishengg_blog/archive/2005/01/17/2627.html#Feedback</comments><slash:comments>32</slash:comments><wfw:commentRss>http://blog.vckbase.com/lishengg_blog/comments/commentRss/2627.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/lishengg_blog/services/trackbacks/2627.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/lishengg_blog/aggbug/2627.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>lishengg的紫罗兰茶馆</dc:creator><title>C++中的 static 关键字</title><link>http://blog.vckbase.com/lishengg_blog/archive/2004/12/26/2323.html</link><pubDate>Sat, 25 Dec 2004 19:15:00 GMT</pubDate><guid>http://blog.vckbase.com/lishengg_blog/archive/2004/12/26/2323.html</guid><wfw:comment>http://blog.vckbase.com/lishengg_blog/comments/2323.html</wfw:comment><comments>http://blog.vckbase.com/lishengg_blog/archive/2004/12/26/2323.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blog.vckbase.com/lishengg_blog/comments/commentRss/2323.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/lishengg_blog/services/trackbacks/2323.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/lishengg_blog/aggbug/2323.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>lishengg的紫罗兰茶馆</dc:creator><title>玩转keybd_event</title><link>http://blog.vckbase.com/lishengg_blog/archive/2004/10/28/1141.html</link><pubDate>Thu, 28 Oct 2004 14:56:00 GMT</pubDate><guid>http://blog.vckbase.com/lishengg_blog/archive/2004/10/28/1141.html</guid><wfw:comment>http://blog.vckbase.com/lishengg_blog/comments/1141.html</wfw:comment><comments>http://blog.vckbase.com/lishengg_blog/archive/2004/10/28/1141.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://blog.vckbase.com/lishengg_blog/comments/commentRss/1141.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/lishengg_blog/services/trackbacks/1141.html</trackback:ping><description>&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 模拟键盘平时不是很常用, 但是当调用某些快捷键执行某项功能时, 它真的是那么的方便呀.&amp;nbsp; 你不信?&amp;nbsp; 看看下面的实现, 你就会大呼: 为什么不早点告诉我?&amp;nbsp; 呵呵,&amp;nbsp; 原来没有blog呀,&amp;nbsp; 都靠这些挣分呢.&lt;/P&gt;
&lt;P&gt;1) 显示桌面:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 很多软件有显示桌面的功能, 并且大家的方法都是遍历窗口,&amp;nbsp; 然后让它们最小化, 其实 win系统给咱们了一个非常方便的WIN键(就是键盘上在CTRL键和ALT键之间的那个带win标志的按键), 利用它, 可以轻松的完成显示桌面的功能.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_LWIN, 0, 0 ,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event('M', 0, 0 ,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event('M', 0, KEYEVENTF_KEYUP ,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);&lt;/P&gt;
&lt;P&gt;其他的操作也类似, 比如直接显示开始的运行,就把上面的'M'换成'R'即可。&lt;/P&gt;
&lt;P&gt;直接&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_LWIN, 0, 0 ,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);&lt;/P&gt;
&lt;P&gt;直接显示&amp;#8220;开始&amp;#8221;对话框了。&lt;/P&gt;
&lt;P&gt;2) 实现快速的全选&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 很多的时候，比如listctrl实现全选，你可以用listctrl循环设置每一项的状态为选中，多罗索的事情呀。用快捷键试一试CTRL＋A，其他的快捷键一样的用法，呵呵，你知道怎么办了吧？&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_CONTROL, (BYTE)0, 0 ,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event('A',(BYTE)0, 0 ,0); //此处可以用&amp;nbsp; 'A', (BYTE)65, 用'a'不起作用.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event('A', (BYTE)0, KEYEVENTF_KEYUP,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_CONTROL, (BYTE)0, KEYEVENTF_KEYUP,0);&lt;/P&gt;
&lt;P&gt;3) 执行某些特殊的键，比如数字键，大小写，下面是数字键的例子&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool bState=true;&amp;nbsp;&amp;nbsp; //true为按下NumLock,false反之&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE keyState[256];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetKeyboardState((LPBYTE)&amp;amp;keyState);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( (bState &amp;amp;&amp;amp; !(keyState[VK_NUMLOCK] &amp;amp; 1)) ||&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (!bState &amp;amp;&amp;amp; (keyState[VK_NUMLOCK] &amp;amp; 1)) )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Simulate a key press&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event( VK_NUMLOCK,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x45,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KEYEVENTF_EXTENDEDKEY | 0,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Simulate a key release&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event( VK_NUMLOCK,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x45,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;4） 你想CTRL＋ALT＋DELETE三键一起按下，&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_CONTROL, 0, 0 ,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_MENU,0, 0 ,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_DELETE,0, 0 ,0);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP ,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_MENU,0, KEYEVENTF_KEYUP ,0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybd_event(VK_DELETE,0, KEYEVENTF_KEYUP ,0);&lt;BR&gt;呵呵，这样不会成功呀，因为这几个键直接是操作系统来截获执行的，而模拟键盘只能发向应用程序，所以这种方法不行的（想显示锁定对话框，用&amp;nbsp;&amp;nbsp;&amp;nbsp; LockWorkStation();）&lt;/P&gt;
&lt;P&gt;5）&amp;nbsp;Window2000/NT/XP已经不提倡用这个函数了，上面的方法只是为了让大家开阔一下思路，怎么替代呢，呵呵，看下面，所以上面的所有代码都可以用这个来完成&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; //2000下用这个代替 ,包含 "winable.h"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INPUT input[4];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset(input, 0, sizeof(input));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input[0].ki.wVk&amp;nbsp; = input[3].ki.wVk = VK_LWIN;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input[1].ki.wVk&amp;nbsp; = input[2].ki.wVk = 'R';&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //接下来释放它，这一点很重要。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input[0].ki.time = input[1].ki.time = input[2].ki.time = input[3].ki.time = GetTickCount();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendInput(4, input, sizeof(INPUT));&lt;/P&gt;
&lt;P&gt;感觉比那个有点罗索，呵呵。&lt;/P&gt;
&lt;P&gt;＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&lt;/P&gt;
&lt;P&gt;附WIN键的部分快捷键:&lt;/P&gt;
&lt;P&gt;WIN键+D=快速的切到桌面，再次点击返回&lt;/P&gt;
&lt;P&gt;WIN键+E=快速打开资源管理器&lt;/P&gt;
&lt;P&gt;WIN键+R=&amp;#8220;运行&amp;#8221;。&lt;/P&gt;
&lt;P&gt;WIN键+M=全部视窗最小化。&lt;/P&gt;
&lt;P&gt;WIN键+Shift+M=取消全部视窗最小化。&lt;/P&gt;
&lt;P&gt;WIN键+F1=Help。&lt;/P&gt;
&lt;P&gt;WIN键+F=&amp;#8220;寻找&amp;#8221;。&lt;/P&gt;
&lt;P&gt;WIN键+Ctrl+F=显示&amp;#8220;查找电脑&amp;#8221;。&lt;/P&gt;
&lt;P&gt;WIN键+Tab=切换工作列的程式。 &lt;/P&gt;
&lt;P&gt;WIN键+Break=显示系统内容。&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/lishengg_blog/aggbug/1141.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>lishengg的紫罗兰茶馆</dc:creator><title>挺好玩的C语句</title><link>http://blog.vckbase.com/lishengg_blog/archive/2004/10/27/1103.html</link><pubDate>Wed, 27 Oct 2004 00:29:00 GMT</pubDate><guid>http://blog.vckbase.com/lishengg_blog/archive/2004/10/27/1103.html</guid><wfw:comment>http://blog.vckbase.com/lishengg_blog/comments/1103.html</wfw:comment><comments>http://blog.vckbase.com/lishengg_blog/archive/2004/10/27/1103.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blog.vckbase.com/lishengg_blog/comments/commentRss/1103.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/lishengg_blog/services/trackbacks/1103.html</trackback:ping><description>&lt;P&gt;我在学习VC,或者在阅读别人写的文章的时候,偶尔碰到下面很多有趣的,并且很奇怪的语句,整理起来,以备后忘. 其实有些是不大容易想到的技巧，贴出来权当大伙饭后没事的小品文，当然不要过多的看重类似的语句学习，而忽略了基础知识。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;一. 奇怪的宏定义&lt;BR&gt;&amp;nbsp; (1)&amp;nbsp; #define for if(0); else for&amp;nbsp; &lt;BR&gt;按照c++标准,for中定义的变量的作用域应该只在for循环中有效,而VC却不行,比如这样定义是不对的&lt;BR&gt;for(int i=0;i&amp;lt;90;i++)&lt;BR&gt;{&lt;BR&gt;...;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;for(int i=0;i&amp;lt;90;i++)&amp;nbsp; //重复定义i变量&lt;BR&gt;{&lt;BR&gt;...;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;如果加上标题的那句,那么就可以了,就是让i作用域局限在else中.&amp;nbsp; 这个问题在net中已经得到解决。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;二、宏定义怪圈&lt;BR&gt;#define&amp;nbsp; wait_event(wq,condition)&amp;nbsp; \&amp;nbsp; &lt;BR&gt;do{&amp;nbsp; \&amp;nbsp; &lt;BR&gt;if(condition)&amp;nbsp; \&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp; \&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __wait_event(wq,condition);&amp;nbsp; \&amp;nbsp; &lt;BR&gt;}while(0)&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;明明这句话只执行一次,为什么还还用do-while语句呢?&lt;/P&gt;
&lt;P&gt;假设有这样一个宏定义&amp;nbsp; &lt;BR&gt;#define&amp;nbsp; macro(condition)&amp;nbsp; \&amp;nbsp; &lt;BR&gt;if(condition)&amp;nbsp; dosomething();&amp;nbsp; &lt;BR&gt;现在在程序中这样使用这个宏：&amp;nbsp; &lt;BR&gt;if(temp)&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; macro(i);&amp;nbsp; &lt;BR&gt;else&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; doanotherthing();&amp;nbsp; &lt;BR&gt;一切看起来很正常，但是仔细想想。这个宏会展开成：&amp;nbsp; &lt;BR&gt;if(temp)&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(condition)&amp;nbsp; dosomething();&amp;nbsp; &lt;BR&gt;else&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; doanotherthing();&amp;nbsp; &lt;BR&gt;这时的else不是与第一个if语句匹配，而是错误的与第二个if语句进行了匹配，编译通过了，但是运行的结果一定是错误的。为了避免这个错误，我们使用do{&amp;#8230;.}while(0)&amp;nbsp; 把它包裹起来，成为一个独立的语法单元，从而不会与上下文发生混淆。同时因为绝大多数的编译器都能够识别do{&amp;#8230;}while(0)这种无用的循环并进行优化，所以使用这种方法也不会导致程序的性能降低。&lt;BR&gt;这个用法在linux源码中很常见。&lt;/P&gt;
&lt;P&gt;三、功能强大的解释&lt;BR&gt;除了/* */和 //解释以外，你见过这样的解释方法了吗？&lt;BR&gt;&amp;nbsp;#if(0)&lt;BR&gt;........&lt;BR&gt;#endif&lt;/P&gt;
&lt;P&gt;这样是为了解释掉某段程序,而不影响其中的/*...*/的作用,便于调试，而/*.....*/是不能嵌套的,编译会出错. &lt;/P&gt;
&lt;P&gt;四、数组变脸 a[i]和i[a]&lt;BR&gt;&amp;nbsp;&amp;nbsp; 在程序里本应该用a[i]，但i[a]竟然和a[i]输出的结果一样。为什么。今天把问题整理如下：&lt;BR&gt;i[a]是标准语法。&amp;#8220;[]&amp;#8221;称为下标运算符，其语法为：&lt;BR&gt;postfix_expression [ expression ]&lt;BR&gt;其中&amp;#8220;postfix_expression&amp;#8221;和&amp;#8220;expression&amp;#8221;之中必须有一个是指针类型（或数组），而另一个是整型。&lt;BR&gt;例如下面的程序是完全合法的：&lt;BR&gt;int a[]={0,1,2,3,4};&lt;BR&gt;printf("%d\n",3[a]);&lt;BR&gt;下标运算符参与的表达式在求解时仅仅是做一个变换而已，将&amp;#8220;postfix_expression [ expression ]&amp;#8221;&lt;BR&gt;改写为&amp;#8220; * ( postfix_expression + expression ) &amp;#8221;，因此a[3]和3[a]分别改写为*(a+3)和*(3+a)，&lt;BR&gt;可见二者是完全等价的。但注意不要用i[a]这种形式，因为它不符合日常习惯。&lt;BR&gt;实验代码：&lt;BR&gt;#include "stdafx.h"&lt;BR&gt;#include "iostream.h"&lt;BR&gt;int f();&lt;BR&gt;int main(int argc, char* argv[])&lt;BR&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int a[20]={1,2,3,4,5,6,7,8,9};&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;a[f()]&amp;lt;&amp;lt;endl;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;f()[a]&amp;lt;&amp;lt;endl;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;int f()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;return 4;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;实验结果：&lt;BR&gt;4&lt;BR&gt;4&lt;BR&gt;Press any key to continue&lt;/P&gt;
&lt;P&gt;五、双胞胎定义和声明：int x;x;&lt;/P&gt;
&lt;P&gt;这儿是个关于宏的问题，我曾用过ATL的串转换宏，包括W2A，开始有些东西我还不太明白。为了使用这些宏，必须在函数的开始处用USES_CONVERSION来初始化某些局部变量。用就用吧，但是看看这个宏的定义，它有类似下面的代码：&lt;/P&gt;
&lt;P&gt;// 在atlconv.h文件中&lt;BR&gt;#define USES_CONVERSION \&lt;BR&gt;int _convert; _convert; \&lt;BR&gt;UINT _acp = GetACP(); _acp; \&lt;BR&gt;LPCWSTR _lpw; _lpw; \ &lt;BR&gt;LPCSTR _lpa; _lpa&lt;/P&gt;
&lt;P&gt;为什么它们用&amp;#8220;int x;x;&amp;#8221;&amp;#8212;&amp;#8212;这种后面跟着变量的声明？ &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 很多人都碰到过这个令人困惑的问题，后来发现简单的答案是：禁止编译器的警告信息（warning）。如果单独有一行代码：&lt;BR&gt;int x;&lt;BR&gt;且从来没有使用过x，那么编译器汇报错&amp;#8220;unreferenced local variable：x&amp;#8221;,意思是未引用过的局部变量x，如果将警告信息的输出&lt;BR&gt;调到最大。为了避免讨厌的警告，USES_CONVERSION引用声明的变量。&lt;/P&gt;
&lt;P&gt;int x; // 声明&lt;BR&gt;x; // 使用这个变量&lt;/P&gt;
&lt;P&gt;在C++之前的时代，程序员有时在C中用函数形参做同样的事情来避免&amp;#8220;unreferenced formal parameter&amp;#8221;或其它的深奥费解的编译错误。&lt;/P&gt;
&lt;P&gt;void MyFunc(int x, char y)&lt;BR&gt;{&lt;BR&gt;x;&lt;BR&gt;y;&lt;BR&gt;&amp;#8230;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;当然，现在用下面的代码可以更有效地完成同样的事情：&lt;/P&gt;
&lt;P&gt;// 参数 x 不是用&lt;BR&gt;void MyFunc(int /* x */) &lt;BR&gt;{&lt;BR&gt;&amp;#8230;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/lishengg_blog/aggbug/1103.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>lishengg的紫罗兰茶馆</dc:creator><title>Depends工具 使用说明和注意</title><link>http://blog.vckbase.com/lishengg_blog/archive/2004/10/27/1102.html</link><pubDate>Wed, 27 Oct 2004 00:17:00 GMT</pubDate><guid>http://blog.vckbase.com/lishengg_blog/archive/2004/10/27/1102.html</guid><wfw:comment>http://blog.vckbase.com/lishengg_blog/comments/1102.html</wfw:comment><comments>http://blog.vckbase.com/lishengg_blog/archive/2004/10/27/1102.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blog.vckbase.com/lishengg_blog/comments/commentRss/1102.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/lishengg_blog/services/trackbacks/1102.html</trackback:ping><description>&lt;P&gt;近期很多兄弟们问怎么样打包程序，如何获取所需dll的信息，这就需要使用VC所带的Depends软件，该软件在VC6安装目录下的tools文件夹里面&amp;nbsp;&amp;nbsp; D:\Microsoft Visual Studio\Common\Tools，直接&lt;BR&gt;双击执行，然后打开exe文件即可，它主要有下面几个注意事项：&lt;/P&gt;
&lt;P&gt;1）所编的软件所需的Dll文件，可以得到相应的Dll路径，版本，属性等。&lt;/P&gt;
&lt;P&gt;2）窗口分四部分：&lt;BR&gt;左上角是Dll信息窗口，显示你程序所需的Dll模块，&lt;BR&gt;右边第一个窗口是所选的Dll模块所使用的函数，&lt;BR&gt;右边第二个窗口是所选Dll模块的所有的导出函数，&lt;BR&gt;下面窗口是所有需要的Dll模块的属性&lt;/P&gt;
&lt;P&gt;3）右边两个窗口出现四个标签：序号，提示，函数，入口点&lt;BR&gt;如果利用导出是函数，那么出现函数名，如果导出的是序号，那么函数项就是N/A（无法显示）&lt;BR&gt;出现红色提示表示不正常，一般为没有该导出函数&lt;/P&gt;
&lt;P&gt;4）该工具得到的是你软件中隐式链接的Dll库，也就是用lib关联的Dll模块，&lt;BR&gt;无法显示显式链接的Dll模块，也就是用LoadLibrary函数导入的Dll函数。（切记切记！）&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;5）无法提供Borland C++ Builder所提供的Dll文件，无法提供vxd软件的调用&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/lishengg_blog/aggbug/1102.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>lishengg的紫罗兰茶馆</dc:creator><title>高效的使用watch窗口</title><link>http://blog.vckbase.com/lishengg_blog/archive/2004/10/27/1101.html</link><pubDate>Tue, 26 Oct 2004 23:59:00 GMT</pubDate><guid>http://blog.vckbase.com/lishengg_blog/archive/2004/10/27/1101.html</guid><wfw:comment>http://blog.vckbase.com/lishengg_blog/comments/1101.html</wfw:comment><comments>http://blog.vckbase.com/lishengg_blog/archive/2004/10/27/1101.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blog.vckbase.com/lishengg_blog/comments/commentRss/1101.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/lishengg_blog/services/trackbacks/1101.html</trackback:ping><description>&lt;PRE&gt;程序调试过程中，最重要也罗嗦的就是要查看变量的值，还有GetLastError要时时执行看API执行&lt;/PRE&gt;&lt;PRE&gt;是否正确，下面的高效的使用watch窗口可以给各位减轻一下调试的劳动：&lt;/PRE&gt;&lt;PRE&gt;在watch窗口中输入下面的内容：

1） @err,hr		显示API函数调用GetLastError的返回值，和解释

2） @eax,hr		显示eax寄存器的值，由于win的API的返回值放在eax中，所以这句话就是得到最近一个API                        的返回值

3） p,***(数字)		数组指针扩展出来只有单个元素，而你又想看到全部数组元素，可以用这个技巧 

4) VC调试观察窗口的格式化符号表格

符号          格式                例子          输出
d或者i      有符号十进制整数     -42，d         -42
U           无符号十进制整数     42，d          42
O           无符号八进制整数     42，o          052 
x或X        十六进制整数         42,x           0x0000002a或0x0000002A
H           为d,I,u,o,x显示前缀  42,hx          0X002a
F           有符号浮点数         1.5，f         1.500000
E           有符号科学计数法     1.5,e          1.500000e+000
G           压缩的有符号浮点数   1.5,g          1.5
C           字符                 42,c           '*'
S           ANSI字符串           "bugs",s       "bugs"
Su          Unicode字符串        "bugs",st      "bugs"
Hr          HRESULT和Win32错误码 0X06,hr        The handle is invalid
wm          Windows消息号        0x01,wm        WM_CREATE
[digits]    显示数组元素         s,5            显示s[]前五个值&lt;/PRE&gt;&lt;PRE&gt;很简单吧，你调试的过程中不妨试一试，事半功倍的效果........&lt;/PRE&gt;&lt;img src ="http://blog.vckbase.com/lishengg_blog/aggbug/1101.html" width = "1" height = "1" /&gt;</description></item></channel></rss>