??xml version="1.0" encoding="utf-8" standalone="yes"?>久久ZYZ资源站无码中文动漫,久久激情五月丁香伊人,久久99精品九九九久久婷婷http://www.shnenglu.com/zpeng/zh-cnThu, 08 May 2025 17:05:19 GMTThu, 08 May 2025 17:05:19 GMT60q期面试见闻http://www.shnenglu.com/zpeng/archive/2012/08/06/186511.html天狼星天狼星Mon, 06 Aug 2012 14:47:00 GMThttp://www.shnenglu.com/zpeng/archive/2012/08/06/186511.htmlhttp://www.shnenglu.com/zpeng/comments/186511.htmlhttp://www.shnenglu.com/zpeng/archive/2012/08/06/186511.html#Feedback3http://www.shnenglu.com/zpeng/comments/commentRss/186511.htmlhttp://www.shnenglu.com/zpeng/services/trackbacks/186511.html今天面试了杭州neroQ?br />先是做题Qc++模板的题做的不好Qcom的挺多. 
技术面试来了两个hQ一个体型壮就叫壮哥吧Q一个尖头奸脑戴个眼镜就U其为尖弟吧Q 壮哥上来问了些基和知识面上的东西Q我是有一说一Q实事求是. 
弟沉静了会开始ؕ叫了Q东一点西一点,奇淫技巧,自以为是Q一些问题都不知他在问啥Q老子听着q大,最看不惯半瓉的贱ZQ 
随后来了ZQ这女的更恶心,嘴上长了个黑点,好像怹上说q种女的怎么怎着来着Q反正对q种价不太好Q果Ӟ从她问的问题看好像是在忽悠,时不时还扮嫩淫笑一下,闷骚十Q?br />看这样子Q这U公司这Uh不去也ŞQ?

天狼星 2012-08-06 22:47 发表评论
]]>
ror的逆向Q代?/title><link>http://www.shnenglu.com/zpeng/archive/2010/08/22/124294.html</link><dc:creator>天狼星</dc:creator><author>天狼星</author><pubDate>Sun, 22 Aug 2010 10:00:00 GMT</pubDate><guid>http://www.shnenglu.com/zpeng/archive/2010/08/22/124294.html</guid><wfw:comment>http://www.shnenglu.com/zpeng/comments/124294.html</wfw:comment><comments>http://www.shnenglu.com/zpeng/archive/2010/08/22/124294.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/zpeng/comments/commentRss/124294.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zpeng/services/trackbacks/124294.html</trackback:ping><description><![CDATA[<p>昨天涛哥让我帮他做点事,其中有一D|把内联汇~代码写成对应的Q代码Ş式,q好是内联的汇编Q思\较清楚,先是抽出来在QDQ中f5一下,然后看着raw code写codeq是较快的,是其中的一条汇~指令ror edi ,1不知如何处理QIDA是直接用了个_ROR()来标识,我感觉不对劲问了下涛哥,他给Z{案Q?br> (edi >> 1) || (edi << 31)<br>我看了感觉有点奇妙了Q?/p> <img src ="http://www.shnenglu.com/zpeng/aggbug/124294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zpeng/" target="_blank">天狼星</a> 2010-08-22 18:00 <a href="http://www.shnenglu.com/zpeng/archive/2010/08/22/124294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于sizeofhttp://www.shnenglu.com/zpeng/archive/2010/08/03/122101.html天狼星天狼星Tue, 03 Aug 2010 13:06:00 GMThttp://www.shnenglu.com/zpeng/archive/2010/08/03/122101.htmlhttp://www.shnenglu.com/zpeng/comments/122101.htmlhttp://www.shnenglu.com/zpeng/archive/2010/08/03/122101.html#Feedback0http://www.shnenglu.com/zpeng/comments/commentRss/122101.htmlhttp://www.shnenglu.com/zpeng/services/trackbacks/122101.html       前段旉接连到公叔R试,其中q些公司包括什么华为,文思创C及其他一些不出名的或忘了叫什么名字的垃圾公司Q跑了不\Q做了不的W试?感觉关于sizeof的运相关的题目较多Q自己将题做的一片糊涂,回来后亲自写了实验来验证。先帖代码:

#include <iostream>
using namespace std;
struct t
{
    
char l;
    
float a;
    
int b[3];
}
;
void func(char ch[100])
{
    cout 
<< "sizeof ch :" <<sizeof(ch) <<endl;
}


void main()
{
    
char * s = "hello";
        char c ;
    
char d[]  = "hello";
    
char r[100];
    func(r);
    cout 
<< “sizeof s :”<<sizeof(s)<<endl

               <<"sizeof c" <<sizeof(c)<<endl

                
<< "sizeof d[] = hello : " << sizeof(d) <<endl 

           
<< "sizeof t :"<<sizeof(t) <<endl 

               
<<"sizeof char r[100] : "<< sizeof(r) <<endl;
}


再帖转蝲来的6条理论:

sizeof操作W的l果cd是size_tQ它在头文g中typedef为unsigned intcd。该cd保证能容U_现所建立的最大对象的字节大小?br>
   1、若操作数具有类型char、unsigned char或signed charQ其l果{于1?br>
         ANSI C正式规定字符cd?字节?br>
   2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long doublecd的sizeof 在ANSI C中没有具体规定,大小依赖于实玎ͼ一般可能分别ؓ4????????0?br>               
               sizeof(c) = 1;

   3、当操作数是指针Ӟsizeof依赖于编译器。例如Microsoft C/C++7.0中,nearcL针字节数?Qfar、hugecL针字节数?。一般Unix的指针字节数??br>
               对于CZE序中的sizeof sQ根据第3条,s是个字符串的指针Q输Zؓ   sizeof s :4


   4、当操作数具有数l类型时Q其l果是数l的d节数?br>
                对于sizeof d[] Q根据第4条,d是数l类型,q回的是数组的字节数再加上末null一字节Qsizeof d[] = hello : 6


   5、联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这U类型对象的d节数Q包括Q何垫补在内?br>
          让我们看如下l构Q?br>
          struct {char b; double x;} a;

          在某些机器上sizeofQaQ?12Q而一般sizeofQcharQ? sizeofQdoubleQ?9?br>
          q是因ؓ~译器在考虑寚w问题Ӟ在结构中插入IZ以控制各成员对象的地址寚w。如doublecd的结构成员x要放在被4整除的地址?br>                对于sizeof t Q对齐后t的大ؓ20故输出结果ؓsizeof t :20


   6、如果操作数是函C的数lŞ参或函数cd的Ş参,sizeofl出其指针的大小?br>                 sizeof ch :4



天狼星 2010-08-03 21:06 发表评论
]]>
switch ,,,case逻辑的逆向http://www.shnenglu.com/zpeng/archive/2010/04/27/113709.html天狼星天狼星Tue, 27 Apr 2010 06:39:00 GMThttp://www.shnenglu.com/zpeng/archive/2010/04/27/113709.htmlhttp://www.shnenglu.com/zpeng/comments/113709.htmlhttp://www.shnenglu.com/zpeng/archive/2010/04/27/113709.html#Feedback2http://www.shnenglu.com/zpeng/comments/commentRss/113709.htmlhttp://www.shnenglu.com/zpeng/services/trackbacks/113709.html  


下面是一D典型的switch...case 语句Q?/p>
 1042C969F    83FD 03          cmp     ebp, 3
 2042C96A2    0F87 02010000    ja      042C97AA
 3042C96A8    FF24AD F8972C04  jmp     dword ptr [ebp*4+42C97F8]        ; js.042C96CB
 4042C96AF    8BCF             mov     ecx, edi
 5042C96B1    2BCE             sub     ecx, esi
 6042C96B3    51               push    ecx
 7042C96B4    8B4C24 24        mov     ecx, dword ptr [esp+24]
 8042C96B8    56               push    esi
 9042C96B9    8D9424 94000000  lea     edx, dword ptr [esp+94]
10042C96C0    52               push    edx
11042C96C1    E8 0A86F8FF      call    04251CD0
12042C96C6    E9 E7000000      jmp     042C97B2
13042C96CB    8BC7             mov     eax, edi
14042C96CD    2BC6             sub     eax, esi
15042C96CF    50               push    eax
16042C96D0    56               push    esi
17042C96D1    8D4C24 30        lea     ecx, dword ptr [esp+30]
18042C96D5    51               push    ecx
19042C96D6    8D8C24 98000000  lea     ecx, dword ptr [esp+98]
20042C96DD    E8 2EE6F8FF      call    04257D10
21042C96E2    3958 18          cmp     dword ptr [eax+18], ebx
22042C96E5    72 05            jb      short 042C96EC
23042C96E7    8B40 04          mov     eax, dword ptr [eax+4]
24042C96EA    EB 03            jmp     short 042C96EF
25042C96EC    83C0 04          add     eax, 4
26042C96EF    50               push    eax
27042C96F0    E8 06450400      call    0430DBFB
28042C96F5    8B5424 28        mov     edx, dword ptr [esp+28]
29042C96F9    83C4 04          add     esp, 4
30042C96FC    395C24 40        cmp     dword ptr [esp+40], ebx
31042C9700    8902             mov     dword ptr [edx], eax
32042C9702    0F82 AA000000    jb      042C97B2
33042C9708    8B4424 2C        mov     eax, dword ptr [esp+2C]
34042C970C    50               push    eax
35042C970D    E8 F8330400      call    0430CB0A
36042C9712    83C4 04          add     esp, 4
37042C9715    E9 98000000      jmp     042C97B2
38042C971A    8BCF             mov     ecx, edi
39042C971C    2BCE             sub     ecx, esi
40042C971E    51               push    ecx
41042C971F    56               push    esi
42042C9720    8D5424 4C        lea     edx, dword ptr [esp+4C]
43042C9724    52               push    edx
44042C9725    8D8C24 98000000  lea     ecx, dword ptr [esp+98]
45042C972C    E8 DFE5F8FF      call    04257D10
46042C9731    3958 18          cmp     dword ptr [eax+18], ebx
47042C9734    72 05            jb      short 042C973B
48042C9736    8B40 04          mov     eax, dword ptr [eax+4]
49042C9739    EB 03            jmp     short 042C973E
50042C973B    83C0 04          add     eax, 4
51042C973E    50               push    eax
52042C973F    E8 B7440400      call    0430DBFB
53042C9744    8B4C24 1C        mov     ecx, dword ptr [esp+1C]
54042C9748    83C4 04          add     esp, 4
55042C974B    395C24 5C        cmp     dword ptr [esp+5C], ebx
56042C974F    8901             mov     dword ptr [ecx], eax
57042C9751    72 5F            jb      short 042C97B2
58042C9753    8B5424 48        mov     edx, dword ptr [esp+48]
59042C9757    52               push    edx
60042C9758    E8 AD330400      call    0430CB0A
61042C975D    83C4 04          add     esp, 4
62042C9760    EB 50            jmp     short 042C97B2
63042C9762    8BC7             mov     eax, edi
64042C9764    2BC6             sub     eax, esi
65042C9766    50               push    eax
66042C9767    56               push    esi
67042C9768    8D4C24 68        lea     ecx, dword ptr [esp+68]
68042C976C    51               push    ecx
69042C976D    8D8C24 98000000  lea     ecx, dword ptr [esp+98]
70042C9774    E8 97E5F8FF      call    04257D10
71042C9779    3958 18          cmp     dword ptr [eax+18], ebx
72042C977C    72 05            jb      short 042C9783
73042C977E    8B40 04          mov     eax, dword ptr [eax+4]
74042C9781    EB 03            jmp     short 042C9786
75042C9783    83C0 04          add     eax, 4
76042C9786    50               push    eax
77042C9787    E8 6F440400      call    0430DBFB
78042C978C    8B5424 20        mov     edx, dword ptr [esp+20]
79042C9790    83C4 04          add     esp, 4
80042C9793    395C24 78        cmp     dword ptr [esp+78], ebx
81042C9797    8902             mov     dword ptr [edx], eax
82042C9799    72 17            jb      short 042C97B2
83042C979B    8B4424 64        mov     eax, dword ptr [esp+64]
84042C979F    50               push    eax
85042C97A0    E8 65330400      call    0430CB0A
86042C97A5    83C4 04          add     esp, 4
87042C97A8    EB 08            jmp     short 042C97B2
88042C97AA    C74424 14 000000>mov     dword ptr [esp+14], 0
89042C97B2    83C5 01          add     ebp, 1
90
91


天狼星 2010-04-27 14:39 发表评论
]]>
转蝲Qunicode 相关的函?http://www.shnenglu.com/zpeng/archive/2010/01/29/106695.html天狼星天狼星Fri, 29 Jan 2010 02:38:00 GMThttp://www.shnenglu.com/zpeng/archive/2010/01/29/106695.htmlhttp://www.shnenglu.com/zpeng/comments/106695.htmlhttp://www.shnenglu.com/zpeng/archive/2010/01/29/106695.html#Feedback0http://www.shnenglu.com/zpeng/comments/commentRss/106695.htmlhttp://www.shnenglu.com/zpeng/services/trackbacks/106695.html  A  
  如果E序定义了_UNICODE宏直接用  
  WCHAR   *str=L"unicodestring";  
  TextOut(0,0Qstr);  
  否则需要{换类? 
  #include   <comdef.h>  
  WCHAR   *str=L"unicodestring";  
  bstr_t   str1=str;  
  TextOut(0,0Q?char*)str1);  
   
  Q   如何实现ANSI和UNICODE的相互{? 
  A  
  ANSI转换到Unicode  
  (1)通过Lq个宏来实现Q例?   CLSIDFromProgID(   L"MAPI.Folder",&clsid);  
  (2)通过MultiByteToWideChar函数实现转换,例如:  
  char   *szProgID   =   "MAPI.Folder";  
  WCHAR   szWideProgID[128];  
  CLSID   clsid;  
  long   lLen   =   MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));  
  szWideProgID[lLen]   =   '\0';    
  (3)通过A2W宏来实现,例如:    
  USES_CONVERSION;    
  CLSIDFromProgID(   A2W(szProgID),&clsid);    
   
  Unicode转换到ANSI  
  (1)使用WideCharToMultiByte,例如:  
  //   假设已经有了一个Unicode   ?  wszSomeString...    
  char   szANSIString   [MAX_PATH];    
  WideCharToMultiByte   (   CP_ACP,   WC_COMPOSITECHECK,   wszSomeString,   -1,   szANSIString,   sizeof(szANSIString),   NULL,   NULL   );    
  (2)使用W2A宏来实现,例如:  
  USES_CONVERSION;  
  pTemp=W2A(wszSomeString);    
   
  注意在{换时可能存在的问题:  
  因ؓANSI转UNICODE,如果使用A2W或MultiByteToWideCharQ第一个参数是CP_ACP)的话,是根据系l默认的转码表,把{入的ANSI字符串看作Multi-Bytes字符串处理的Q如果是中文Q中文windows默认是中文Q,一个大?x87的byte可能和下一byte一赯看作一个汉字,然后Ҏ汉字的Unicode~码转换为相同的Unicode汉字Q如果找不到相应的编码,一般就用一个默认的字符来取代它Q一般是问号“Q?#8221;Q?由此看,如果随便把一D|据给他{Q{化很复杂而且极可能不可逆,而且你加密过的ANSI码是相当混ؕ的有很多?x87的byte,转换变得不可逆了? 
  自己直接p样写Q? 
  CHAR   lpANSI[COUNT];  
  WCHAR   lpUnicode[COUNT];  
  int   i   =   0;    
  while(lpANSI[i]   !=   '\0'   )   {  
          lpUnicode[i]   =   (WCHAR)lpANSI[i];  
  }  
  lpUnicode[i]   =   L'\0';  
  然后按相同的Ҏ转回来,因ؓ对于0~0x87的ANSI字符Ԍ对应的Unicode码就是相同的16位|至于其他的,你的字符串反正加了密Q没必要转换成显C出来是一L字符Q就按同LҎ处理了,其实如果中间的字W串不用昄或别的,直接reutrn   (LPWSTR)lpANSI;q去也可?   反正接受的时候自己清楚就可以了? 
   
  Q   如何让程序支持UNICODE    
  A    
  NTpȝ的内核是unicode代码,通常vc分创建的工程默认都是ansi代码Q可以兼容win9xQ?在nt下ansiE式在调用windows   API的时pȝ实际又进行了一ơansi到unicode的代码{?如MoveWindowA实际上又调用MoveWindowW.如果以我们的E序不考虑win9x(早晚是明日黄?的话,直接用unicode~译Q那么程式的代码执行效率一定能增色不少.具体:  
  (0).在vc~译选项?在vc7.0以上在工E的属性页中的“字符?#8221;选上"使用   Unicode   字符?卛_Q在vc6.0下可能麻烦一点,得先把vcq行库的unicode版本复制到vc路径?一般都是和xxx.lib的ansi对应xxxU.lib,默认装vc时是不会装的Q将工程属? 
  (0).1.改语a定义:  
  在project   settings?C++"中?preprocessor   definitions"中改_MBCS为_UNICODE  
  (0).2.改入口函?  
  ?link"中?project   Options"加入/entry:"wWinMainCRTStartup"卛_.  
   
  (1)在代码上,处理字符中的多用TCHAR.H中的?如strcpy用_tcscpy代替,用TCHAR代char,  
  用TCHAR   m_mystr[]=_T("xxxx")代替   char   m_mystr[]="xxxx";  
  (2)注意调试UNICODEE序Ӟ需要在安装时VC选择所有选项Q否则会~少动态库和相应的.lib文g  
   
  Q   如何取得一个既包含单字节字W又包含双字节字W的字符串的字符个数Q? 
  A  
  可以调用Microsoft   Visual   C++的运行期库包含函数_mbslen来操作多字节Q既包括单字节也包括双字节)字符丌Ӏ? 
  调用strlen函数Q无法真正了解字W串中究竟有多少字符Q它只能告诉你到辄0之前有多个字节? 
   
  Q   如何对DBCSQ双字节字符集)字符串进行操作?  
  A  
  函数   描述  
  PTSTR   CharNext   Q?  LPCTSTR   Q?   q回字符串中下一个字W的地址  
  PTSTR   CharPrev   Q?  LPCTSTR,   LPCTSTR   Q;   q回字符串中上一个字W的地址  
  BOOL   IsDBCSLeadByte(   BYTE   )Q?  如果该字节是DBCS字符的第一个字节,则返回非0? 
   
  Q   Z么要使用UnicodeQ? 
  A  
  (1)   可以很容易地在不同语a之间q行数据交换? 
  (2)   使你能够分配支持所有语a的单个二q制.exe文g或DLL文g? 
  (3)   提高应用E序的运行效率? 
  Windows   2000是用Unicode从头q行开发的Q如果调用Q何一个Windows函数q给它传递一个ANSI字符Ԍ那么pȝ首先要将字符串{换成UnicodeQ然后将Unicode字符串传递给操作pȝ。如果希望函数返回ANSI字符Ԍpȝ׃首先Unicode字符串{换成ANSI字符Ԍ然后结果返回给你的应用E序。进行这些字W串的{换需要占用系l的旉和内存。通过从头开始用Unicode来开发应用程序,p够你的应用E序更加有效地运行? 
  Windows   CE   本n是使用Unicode的一U操作系l,完全不支持ANSI   Windows函数  
  Windows   98   只支持ANSIQ只能ؓANSI开发应用程序? 
  Microsoft公司COM?6位Windows转换成Win32Ӟ公司军_需要字W串的所有COM接口Ҏ都只能接受Unicode字符丌Ӏ? 
   
  Q   如何~写Unicode源代码?  
  A  
  Microsoft公司为Unicode设计了WindowsAPIQ这P可以量减少代码的媄响。实际上Q可以编写单个源代码文gQ以便用或者不使用Unicode来对它进行编译。只需要定义两个宏QUNICODE和_UNICODEQ,可以修改然后重新编译该源文件? 
  _UNICODE宏用于Cq行期头文gQ而UNICODE宏则用于Windows头文件。当~译源代码模块时Q通常必须同时定义q两个宏? 
   
  Q   Windows定义的Unicode数据cd有哪些?  
  A  
  数据cd   说明  
  WCHAR   Unicode字符  
  PWSTR   指向Unicode字符串的指针  
  PCWSTR   指向一个恒定的Unicode字符串的指针  
  对应的ANSI数据cd为CHARQLPSTR和LPCSTR? 
  ANSI/Unicode通用数据cd为TCHARQPTSTR,LPCTSTR? 
   
  Q   如何对Unicodeq行操作Q? 
  A  
  字符?  Ҏ?  实例  
  ANSI   操作函数以str开?  strcpy  
  Unicode   操作函数以wcs开?  wcscpy  
  MBCS   操作函数以_mbs开?  _mbscpy  
  ANSI/Unicode   操作函数以_tcs开?  _tcscpyQCq行期库Q? 
  ANSI/Unicode   操作函数以lstr开?  lstrcpyQWindows函数Q? 
  所有新的和未过时的函数在Windows2000中都同时拥有ANSI和Unicode两个版本。ANSI版本函数l尾以A表示QUnicode版本函数l尾以W表示。Windows会如下定义:  
  #ifdef   UNICODE  
  #define   CreateWindowEx   CreateWindowExW  
  #else  
  #define   CreateWindowEx   CreateWindowExA  
  #endif   //   !UNICODE

天狼星 2010-01-29 10:38 发表评论
]]>
[转蝲]关于windows消息分流?/title><link>http://www.shnenglu.com/zpeng/archive/2010/01/27/106565.html</link><dc:creator>天狼星</dc:creator><author>天狼星</author><pubDate>Wed, 27 Jan 2010 15:53:00 GMT</pubDate><guid>http://www.shnenglu.com/zpeng/archive/2010/01/27/106565.html</guid><wfw:comment>http://www.shnenglu.com/zpeng/comments/106565.html</wfw:comment><comments>http://www.shnenglu.com/zpeng/archive/2010/01/27/106565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zpeng/comments/commentRss/106565.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zpeng/services/trackbacks/106565.html</trackback:ping><description><![CDATA[<div id="d3bx3t5" class=g_blog_list> <div id="t3nx3nj" class="g_t_center g_c_pdin g_p_center c07 content" id=blogtext_fks_085068093084082067093085094095087087084070081095085065> <div id="53rhlnp" class=ns_content> <p>在Jeffrey的Error ShowE序作者自定义了一D宏</p> <p>#define chHANDLE_DLGMSG(hWnd, message, fn)                 \<br>   case (message): return (SetDlgMsgResult(hWnd, uMsg,     \<br>      HANDLE_##message((hWnd), (wParam), (lParam), (fn))))</p> <p>HANDLE_##message((hWnd), (wParam), (lParam), (fn))是借用了windows.h里面?/p> <p>#define HANDLE_MSG(hwnd, message, fn) <br>case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))</p> <p>如果message是DQ_QRQAQ的话,q个应该?/p> <p> HANDLE_WM_CREATE((hwnd), (wParam), (lParam), (Cls_OnCreate))</p> <p>Qdefine HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) \<br>    ((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)</p> <p>那么宏展开为:return Cls_OnCreate(hwnd, (LPCREATESTRUCT)(lParam) )? 0L : (LRESULT)-1L;</p> <p><br><br>但是在对话框消息处理?对话框过E函数应该在处理了消息的情况下返回TRUEQ如果没有处理,则返回FALSE。如果对话框q程q回了FALSEQ那么对话框理器ؓq条消息准备默认的对话操作。如果对话框处理了一个需要特定返回值的消息Q则对话框的q回值应该被讄用SetWindowLong后的q回?q些Ҏ消息?</p> <p>? WM_CHARTOITEM <br>? WM_COMPAREITEM <br>? WM_CTLCOLORBTN <br>? WM_CTLCOLORDLG <br>? WM_CTLCOLOREDIT <br>? WM_CTLCOLORLISTBOX <br>? WM_CTLCOLORSCROLLBAR <br>? WM_CTLCOLORSTATIC <br>? <font color=#ff0000>WM_INITDIALOG</font> <br>? WM_QUERYDRAGICON <br>? WM_VKEYTOITEM</p> <p>所以在处理<font color=#ff0000>WM_INITDIALOG</font> ?我们不能单纯的调用消息分器.</p> <p>而在处理QP݋QEQ݋QAQD中,从windowsx.h可以看到:</p> <p>/* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */<br>#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \<br>    ((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)</p> <p>void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) </p> <p>Cls_OnCommand׃是个void型的函数Q是没有q回值的Q因此windows默认q种消息处理q程必须q回一?|而返?gpC我们的消息q程不处理这个消?q是矛盾?如果直接使用HANDLE_WM_COMMAND(hwnd, wParam, lParam,  Dlg_OnCommand) ;按钮会没有反?关闭也不?所以可以用用下面的宏解?/p> <p>#define     SetDlgMsgResult(hwnd, msg, result) (( \<br>        (msg) == WM_CTLCOLORMSGBOX      || \<br>        (msg) == WM_CTLCOLOREDIT        || \<br>        (msg) == WM_CTLCOLORLISTBOX     || \<br>        (msg) == WM_CTLCOLORBTN         || \<br>        (msg) == WM_CTLCOLORDLG         || \<br>        (msg) == WM_CTLCOLORSCROLLBAR   || \<br>        (msg) == WM_CTLCOLORSTATIC      || \<br>        (msg) == WM_COMPAREITEM         || \<br>        (msg) == WM_VKEYTOITEM          || \<br>        (msg) == WM_CHARTOITEM          || \<br>        (msg) == WM_QUERYDRAGICON       || \<br>        (msg) == WM_INITDIALOG             \<br>    ) ? (BOOL)(result) : (SetWindowLong((hwnd), DWL_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE))</p> <p>#define chHANDLE_DLGMSG(hWnd, message, fn)                 \<br>   case (message): return (SetDlgMsgResult(hWnd, uMsg,     \<br>      HANDLE_##message((hWnd), (wParam), (lParam), (fn))))</p> <p>从这两个宏可以得?如果是特D消息的话那么返回默?,q设|说明消息处?如果WM_COMMAND的话,那么q回SetWindowLong((hwnd), DWL_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE),一般ؓTRUE表明已经处理</p> </div> </div> </div> <img src ="http://www.shnenglu.com/zpeng/aggbug/106565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zpeng/" target="_blank">天狼星</a> 2010-01-27 23:53 <a href="http://www.shnenglu.com/zpeng/archive/2010/01/27/106565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转蝲]汇编语言术右移和逻辑右移的区别是什么?http://www.shnenglu.com/zpeng/archive/2010/01/15/105725.html天狼星天狼星Fri, 15 Jan 2010 03:23:00 GMThttp://www.shnenglu.com/zpeng/archive/2010/01/15/105725.htmlhttp://www.shnenglu.com/zpeng/comments/105725.htmlhttp://www.shnenglu.com/zpeng/archive/2010/01/15/105725.html#Feedback0http://www.shnenglu.com/zpeng/comments/commentRss/105725.htmlhttp://www.shnenglu.com/zpeng/services/trackbacks/105725.html1.汇编语言中的逻辑右移(SHR)是将各位依次右移指定位数Q然后在左侧?,术右移(SAR)是将各位依次右移指定位数Q然后在左侧用原W号位补齐?

2.高语言右移q算W(>>Q是一个数的二q位全部右移若干?低位Ud部分舍弃Q左??br> 
3.高语言右移和汇~语a中的逻辑右移功能一P但不同于术右移?



天狼星 2010-01-15 11:23 发表评论
]]>
[转蝲]vc++中的常用?/title><link>http://www.shnenglu.com/zpeng/archive/2009/12/21/103625.html</link><dc:creator>天狼星</dc:creator><author>天狼星</author><pubDate>Mon, 21 Dec 2009 05:54:00 GMT</pubDate><guid>http://www.shnenglu.com/zpeng/archive/2009/12/21/103625.html</guid><wfw:comment>http://www.shnenglu.com/zpeng/comments/103625.html</wfw:comment><comments>http://www.shnenglu.com/zpeng/archive/2009/12/21/103625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zpeng/comments/commentRss/103625.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zpeng/services/trackbacks/103625.html</trackback:ping><description><![CDATA[AND_CATCHAND_CATCH <br>AND_CATCH(exception_class,exception _object_point_name) <br>说明Q?br><br>定义一个代码块Q它用于获取废除当前TRY块中的附加异常类型。用CATCH宏以获得一个异常类型,然后使用AND_CATCH宏获得随后的异常处理代码可以讉K异常对象Q若合适的?已得到关于异常的特别原因的更多消息。在AND_CATCH块中调用THROW_LAST宏以便把处理q程Ud下个外部异常框架。AND_CATCH可标记CATCH或AND_CATCH块的末尾?<br><br>注释Q?<br>AND_CATCH块被定义成ؓ一个C++作用域(p括号来描qͼ。若用户在此作用域定义变量,那么C他们只在此作用域中可以访问。他也用于exception_object_pointer_name变量?<br><br>ASSERT <br>ASSERT(booleanExpression) <br>说明Q?<br>计算变量的倹{如果结构的gؓ0Q那么此宏便打印一个诊断消息ƈ且成讯运行失败。如果条件ؓ?Q那么什么也不做?诊断消息的Ş式ؓQ?assertion failed in file in line 其中name是元文g名,num是源文g中运行失败的中断受?在Release版中QASSERT不计表辑ּ的g׃中断E序。如果必计此表达式的g不管环境如何那么用VERIFY代替ASSERT?<br>注释Q?<br>ASSERT只能在Debug版中?<br><br>ASSERT_VAILD <br>ASSERT_VAILD(pObject) <br>说明Q?<br>用于<a class=vLink1 id=vad_0 onmouseover="this.style.borderBottom='2px #FF3366 solid';var fxEvent=arguments[0];kwmouseover(this,0,fxEvent);" style="FONT-SIZE: 1em; CURSOR: hand; COLOR: #ff3366; BORDER-BOTTOM: #ff3366 1px dotted; TEXT-DECORATION: underline" onmouseout="this.style.borderBottom='1px #FF3366 dotted';kwmouseout(this,0)" target=_blank name=0>?/a>关于对象的内部状态的有效性。ASSERT_VALID调用此对象的AssertValid成员函数Q把它们作ؓ自己的变量来传递)。在Release版中ASSERT_VALID什么也不做。在DEBUG版中Q他查指针,以不同于NULL的方式进行检查,q调用对象自qAssertValid成员函数。如果这些检中有Q何一个失败的话,那么他会以与ASSERT相同的方法显CZ个警告的消息?<br>注释Q?<br>此函数只在DEBUG版中有效?<br><br>BEGIN_MESSAGE_MAP <br>BEGIN_MESSAGE_MAP(the class,baseclass) <br>说明Q?<br>使用BEGIN_MESSAGE_MAP开始用h息映的定义。在定义用户cd数的工具Q?cppQ文件中Q以BEGIN_MESSAGE_MAP宏开始消息映,然后为每个消息处理函数增加宏,接着以END_MESSAGE_MAP宏完成消息映?<br><br>CATCH <br>CATCH(exception_class,exception_object_pointer_name) <br>说明Q?<br>使用此用定义一个代码块Q此代码用来获取当前TRY块中都一个异常类型。异常处理代码可以访问异常对象,如何合适的话,׃得到关于异常的特D原因的更多消息。调用THROW_LAST宏以把处理过E一下一个外部异常框Ӟ如果exception-class是类CExceptioon,那么会获取所有异常类型。用户可以用CObject::IsKindOf成员函数以确定那个特别异常被排除。一U获取异常的最好方式是使用序的AND_CATCH语句Q每个带一个不同的异常cd。此异常cd的指针由宏定义,用户不必定义?<br>注释Q?<br>此CATCH块被定义作一个C++范围Q由花括hqͼ。如用户在此范围定义变量Q那么它们只在吃范围内可以访问。他q可以用于异常对象的指针名?<br><br>DEBUG_NEW <br>#define new DEBUG_NEW <br>说明Q?<br>帮助查找内存错误。用户在E序中用DEBUG_NEW,用户通常使用newq算W来从堆上分配。在Debug模式下(但定义了一个DEBUGW号Q,DEBUG_NEW为它分配的每个对象记录文件名和行受然后,在用户用CMemoryState::DumpAllObjectSince成员函数Ӟ每个以DEBUG_NEW分配的对象分配的地方昄出文件名和行受?Z使用DEBUG_NEW,应在用户的资源文件中插入以下指oQ?#define new DEBUG_NEW 一旦用h入本指oQ预处理E序在使用new的地Ҏ入DEBUG_NEWQ而MFC作其余的工作。但用户~译自己的程序的一个发行版ӞDEBUG_NEW便进行简单的new操作Q而且不生文件名和行h息?<br><br>DECLARE_DYNAMIC <br>DECLARE_DYNAMIC(class_name) <br>说明Q?<br>但从CObjectz一个类Ӟ此宏增加关于一个对象类的访问运行时间功能。把DECLARE_DYNAMIC宏加入类的头文g中,然后在全部需要访问词cd象的.CPP文g中都包含此模块。如果像所描述那样使用DELCARE_DYNAMIC和IMPLEMENT_DYNAMIC宏,那么用户便可使用RUNTIME_CLASS宏和CObject::IsKindOf函数以在q行旉军_对象cR如果DECLARE_DYNAMIC包含在类定义中,那么IMPLEMETN_DYNAMIC必须包含在类工具中?<br><br>DECLARE_DYNCREATE <br>DECLARE_DYNCREATE(class_name) <br>说明Q?<br>使用DECLARE_DYNCRETE宏以便允许CObjectzcȝ对象在运行时刻自动徏立。主Z用此功能自动建立新对象,例如Q但它在串行化过E中从磁盘读一个对象时Q文件及视图和框架窗应该支持动态徏立,因ؓ框架需要自动徏立它。把DECLARE_DYNCREATE宏加入类?H文g中,然后在全部需要访问此cd象的.CPP文g中包含这一模式。如果DECLARE_DYNCREATE包含在类定义中,那么IMPLEMENT_DYNCREATE必须包含在类工具中?<br><br>DECLARE_MESSAGE_MAP <br>DECLARE_MESSAGE_MAP() <br>说明Q?<br>用户E序中的每个CCmdTargetzcdL供消息映以处理消息。在cd义的末尾使用DECLARE_MESSAGE_MAP宏。接着Q在定义cL员函数的.CPP文g中,使用BEGIN_MESSAGE_MAP宏,每个用户消息处理函数的宏下面的列表以及END_MESSAGE_MAP宏?<br>注释Q?<br>如果在DECLARE_MESSAGE_MAP之后定义M一个成员,那么必须Z们指定一个新存取cdQ公qQ私有的Q保护的Q?<br><br>DECLARE_SERIAL <br>DECLARE_SERIAL(class_name) <br>说明Q?<br>DECLARE_SERIALZ个可以串行化的CObjectzcM生必要的C++标题代码。串行化是把某个对象的内容从一个文件读出和写入一文g。在.H文g中用DECLARE_SERIAL宏,接着在需要访问此cd象的全部.CPP文g中包含此文g。如果DECLARE_SERIAL包含在类定义中,那么IMPLEMENT_SERIAL必须包含在类工具中。DECLARE_SERIAL宏包含全部DECLARE_DYNAMIC,IMPLEMENT_DYCREATE的功能?<br><br>END_CATCH <br>END_CATCH <br>说明Q?<br>标识最后的CATCH或AND_CATCH块的末尾?<br><br>END_MESSAGE_MAP <br>END_MESSAGE_MAP <br>说明Q?<br>使用END_MESSAGE_MAP宏结束用L消息映射定义 <br>IMPLEMENT_DYNAMIC <br>IMPLEMENT_DYNAMIC(class_name,base_class_name) <br>说明Q?<br>通过q行时在串行l构中ؓ动态CObjectzc访问类名和位置来生必要的C++代码。在.CPP文g中用IMPLEMENT_DYNAMIC宏,接着一ơ链接结果对象代?<br><br>IMPLEMENT_DYNCREATE <br>IMPLEMENT_DYNCREATE(class_name,base_class_name) <br>说明Q?<br>通过DECLARE_DYNCREATE宏来使用IMPLEMENT_DYNCREATE宏,以允许CObjectzcd象在q行时自动徏立。主Z用此功能自动建立对象Q例如,但它在串行化q程中从盘d一个对象时Q他在类工具里加入IMPLEMENT_DYNCREATE宏。若用户使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE?那么接着使用RUNTIME_CLASS宏和CObject::IsKindOf成员函数以在q行时确定对象类。若declare_dyncreate包含在定义中Q那么IMPLEMENT_DYNCREATE必须包含在类工具中?<br><br>IMPLEMENT_SERIAL <br>IMPLEMENT_SERIAL(class_name,base_class_name,wSchema) <br>说明Q?<br>通过q行时在串行l构中动态CObjectzc访问类名和位置来徏立必要的C++代码。在.CPP文g中用IMPLEMENT_SERIAL宏,然后一ơ链接结果对象代码?<br><br>ON_COMMAND <br>ON_COMMAND(id,memberFxn) <br>说明Q?<br>此宏通过ClassWizard或手工插入一个消息映。它表明那个函数从一个命令用h口(例如一个菜单项或toolbar按钮Q处理一个命令消息。当一个命令对象通过指定的ID接受C个Windows WM_COMMAND消息ӞON_COMMAND调用成员函数memberFxn处理此消息。在用户的消息映中Q对于每个菜单或加速器命oQ必被映射C个消息处理函敎ͼ应该实有一个ON_COMMAND宏语句?<br><br>ON_CONTROL <br>ON_CONTROL(wNotifyCode,id,memberFxn) <br>说明Q?<br>表明哪个函数处理一个常规控制表C消息。控制标识消息是那些从一个控制夫发送到母窗口的消息?<br><br>ON_MESSAGE <br>ON_MESSAGE(message,memberFxn) <br>说明Q?<br>指明哪个函数处理一用户定义消息。用户定义消息通常定义在WM_USER?x7FF范围内。用户定义消息是那些不是标准Windows WM_MESSAGE消息的Q何消息。在用户的消息映中Q每个必被映射C个消息处理函数。用户定义消息应该有一个ON_MESSAGE宏语句?<br><br>ON_REGISTERED_MESSAGE <br>ON_REGISTERED_MESSAGE(nmessageVarible,memberFxn) <br>说明Q?<br>Windows的RegisterWindowsMesage函数用于定义一个新H口消息Q此消息保证在整个系l中是唯一的。此宏表明哪个函数处理已注册消息。变量nMessageViable应以NEAR修饰W来定义?<br><br>ON_UPDATE_COMMAND_UI <br>ON_UPDATE_COMMAND_UI(idQmemberFxn) <br>说明Q?<br>此宏通常通过ClassWizard被插入一个消息映,以指明哪个函数将处理一个用h口个更改命o消息。在用户的消息映中Q每个用h口更改命令(比讯被映到一个消息处理函敎ͼ应该有一个ON_UPDATE_COMMAND_UI宏语句?<br><br>ON_VBXEVENT <br>ON_VBXEVENT(wNotifyCode,memberFxn) <br>说明Q?<br>此宏通常通过ClassWizard被插入一个消息映,以指明哪个函数将处理一个来自VBX控制的消息。在用户的消息映中每个被映到一消息处理函数的VBX控制消息应该有一个宏语句?<br><br>RUNTIME_CLASS <br>RUNTIME_CLASS(class_name) <br>说明Q?<br>使用此宏从c++cL众获取运行时cȝ构。RUNTIME_CLASS为由class_name指定的类q回一个指针到CRuntimeClassl构。只有以DECLARE_DYNAMIC,DECLARE_DYNCREATE或DECLARE_SERIAL定义的CObjectzcLq回C个CRuntimeClassl构的指针?<br><br>THROW <br>THROW(exception_object_pointer) <br>说明Q?<br>zև指定的异常。THROW中断E序的运行,把控制传递给用户E序中的相关的CATCH块。如果用h有提供CATCH块,那么控制被传递到一个MFC模块Q他打印Z个错误ƈl止q行?<br><br>THROW_LAST <br>THROW_LAST() <br>说明Q?<br>此宏允许用户zև一个局部徏立的异常。如果用戯图排除一个刚发现的异常,那么一般此异常溢出ƈ被删除。用THROW_LAST,此异常被直接传送到下一个CATCH处理E序?<br><br>TRACE <br>TRACE(exp) <br>说明Q?<br>把一个格式化字符串送到转储讑֤Q例如,文g或调试监视器Q而提供与printf怼的功能。同MS_DOS下CE序的printf一PTRACE宏是一个在E序q行时跟t变量值的方便形式。在DEBUG环境中,TRACE宏输出到afxDump。在Release版中他不做Q何工作?<br>注释Q?<br>此宏只在MFC的DEBUG版中有效?<br><br>TRACE0 <br>TRACE0(exp) <br>说明Q?<br>与TRACE怼Q但他把跟踪字符串放在代码段中,而不是DGROUP,因此使用的DGROUPI间。TRACE0是一l跟t宏的一个变体,q些宏可用于调试输出。这一l包括TRACE0,TRACE1,TRACE2和TRACE3,q些宏不同在于所取参数的数目不同。TRACE0只取一个格式化字符串ƈ可用于简单文本消息。TRACE1取一格式化字W串加上一个变量——一个将转储的变量。同PTRACE2,TRACE3分别?个或3个参敎ͼ在格式化字符串之后)。如果用户以便以了应用程序的发行版,那么它只把数据{储到afxDump?<br>注释Q?<br>此宏只在MFC的DEBUG中有效?<br><br><br>TRACE1 <br>TRACE1(exp,param1) <br>说明Q?<br>参见TRACE0 <br><br>TRACE2 <br>TRACE2(exp,param1,param2) <br>说明Q?<br>参见TRACE0 <br><br>TRACE3 <br>TRACE3(exp,param1,param2,param3) <br>说明Q?<br><br>TRY <br>TRY <br>说明Q?<br>使用此宏建立一TRY块。一个TRY识别一个可排除异常的代码块。这些异常在随后的CATCH和AND_CATCH块处理。传递是允许的:异常可以传递一个外部TRY块,或者忽略它们或者用THROW_LAST宏?<br><br>VERIFY <br>VERIFY(booleanExpression) <br>说明Q?<br>在MFC的DEBUG版中QVERIFY宏计它的变量倹{?如果l果?Q那么宏打印一个诊断消息ƈ中止E序。如果条件不?Q那么什么工作也不作?诊断有如下Ş式: assertion failed in file in line 其中name是源文g的名字,num是在源文件中p|的中止行受在MFC的Release版中QVERIFY计算表达式g不打印或中止E序。例如:如果表达式是个函数调用,那么调用成功?<br><br> <img src ="http://www.shnenglu.com/zpeng/aggbug/103625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zpeng/" target="_blank">天狼星</a> 2009-12-21 13:54 <a href="http://www.shnenglu.com/zpeng/archive/2009/12/21/103625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转蝲] C++嵌套c?http://www.shnenglu.com/zpeng/archive/2009/12/21/103615.html天狼星天狼星Mon, 21 Dec 2009 04:00:00 GMThttp://www.shnenglu.com/zpeng/archive/2009/12/21/103615.htmlhttp://www.shnenglu.com/zpeng/comments/103615.htmlhttp://www.shnenglu.com/zpeng/archive/2009/12/21/103615.html#Feedback0http://www.shnenglu.com/zpeng/comments/commentRss/103615.htmlhttp://www.shnenglu.com/zpeng/services/trackbacks/103615.htmlC++嵌套c?
1、从作用域的角度看,嵌套c被隐藏在外围类之中Q该cd只能在外围类中用。如果在外围cȝ作用域内使用该类名时Q需要加名字限定?

2、从讉K权限的角度来看,嵌套cd与它的外围类的对象成员名h相同的访问权限规则。不能访问嵌套类的对象中的私有成员函敎ͼ也不能对外围cȝU有部分中的嵌套cd立对象?

3、嵌套类中的成员函数可以在它的类体外定义?

4、嵌套类中说明的成员不是外围cM对象的成员,反之亦然。嵌套类的成员函数对外围cȝ成员没有讉K权,反之亦然。因此,在分析嵌套类   ?nbsp;  外围cȝ成员讉K关系Ӟ往往把嵌套类看作非嵌套类来处理?由引可见Q嵌套类仅仅是语法上的嵌入?br>
5、在嵌套cM说明的友元对外围cȝ成员没有讉K权?

6、如果嵌套类比较复杂Q可以只在外围类中对嵌套c进行说明,关于嵌套的详l的内容可在外围cM外的文g域中q行定义?



天狼星 2009-12-21 12:00 发表评论
]]>
friend 友元http://www.shnenglu.com/zpeng/archive/2009/12/21/103614.html天狼星天狼星Mon, 21 Dec 2009 03:54:00 GMThttp://www.shnenglu.com/zpeng/archive/2009/12/21/103614.htmlhttp://www.shnenglu.com/zpeng/comments/103614.htmlhttp://www.shnenglu.com/zpeng/archive/2009/12/21/103614.html#Feedback0http://www.shnenglu.com/zpeng/comments/commentRss/103614.htmlhttp://www.shnenglu.com/zpeng/services/trackbacks/103614.htmlC++ primer一书中友元那节的题UԌ
1.友元关系
2.使其他类的成员函数成为友?br>3.友元声明与作用域
4.重蝲函数与友元关p?nbsp;



天狼星 2009-12-21 11:54 发表评论
]]>
ŷԴսþþþþ| þþþó˾Ʒ| ۺҹҹþ| þԭavapp| ٸþþþþñŪ߳| þþƷav| þþþùһëƬ| þþþһƷ| þۺ༤| 99þùۺϾƷӰԺ| ˾þþƷӰԺ| ƷŷƬþùŷ| ͵þþþƷר| Ӱһþҹײ | þֻоƷ߹ۿ| ھƷžžþþþƷ| AŮAVۺϾþþ| ݺݾþŷר| þþþþþòҰ¸߳| þùҹaӰԺ| Ʒٸavþ| þۺ϶| 99þþƷþþþþ崿 | 91Ʒþþþþ| þþоƷ| þùƷվ| ɫۺϾþþþ| þþƷѿ| 99þ뾫Ʒϵ | Ʒ99þþþþ| ŷ˾þþƷ| þþþƷSmվ| ٸ޾þþþþ4| ŷƷһþ˵| þþþ99ƷƬŷ| ҹƷþþþþþþ| þ޾ƷAVӣ| Ļһþ| ձ޷츾þþþþ| þҹɫƷAV| 㽶þۺӰ|