µÚ1ÕÂ ´í Îó ´¦ Àí
±¾ÕÂÄÚÈÝ
1.1 ¶¨Òå×Ô¼ºµÄ´íÎó´úÂë 1.2 ErrorShowʾÀý³ÌÐò
ÔÚÉîÈëÌÖÂÛMicrosoft Windows ÌṩµÄÖî¶àÌØÐÔ֮ǰ£¬Ó¦¸ÃÏÈÀí½â¸÷¸öWindowsº¯ÊýÊÇÈçºÎ½øÐдíÎó´¦ÀíµÄ¡£
µ÷ÓÃWindowsº¯Êýʱ£¬Ëü»áÏÈÑéÖ¤ÎÒÃÇ´«¸øËüµÄ²ÎÊý£¬È»ºóÔÙ¿ªÊ¼Ö´ÐÐÈÎÎñ¡£Èç¹û´«ÈëµÄ²ÎÊýÎÞЧ£¬»òÕßÓÉÓÚÆäËûÔÒòµ¼Ö²Ù×÷ÎÞ·¨Ö´ÐУ¬Ôòº¯ÊýµÄ·µ»ØÖµ½«Ö¸³öº¯ÊýÒòΪijЩÔÒòʧ°ÜÁË¡£±í1-1չʾÁË´ó¶àÊýWindowsº¯ÊýʹÓõķµ»ØÖµµÄÊý¾ÝÀàÐÍ¡£
±í1-1 ³£¼ûµÄWindowsº¯Êý·µ»ØÖµÊý¾ÝÀàÐÍ
Êý¾ÝÀàÐÍ VOID BOOL HANDLE Ö¸³öº¯Êýµ÷ÓÃʧ°ÜµÄÖµ Õâ¸öº¯Êý²»¿ÉÄÜʧ°Ü¡£Ö»Óм«ÉÙÊýWindowsº¯ÊýµÄ·µ»ØÖµÀàÐÍΪVOID Èç¹ûº¯Êýʧ°Ü£¬·µ»ØÖµÎª0£»·ñÔò£¬·µ»ØÖµÊÇÒ»¸ö·Ç0Öµ¡£Ó¦±ÜÃâ²âÊÔ·µ»ØÖµÊÇ·ñΪTRUE£»×îÎÈÍ×µÄ×ö·¨ÊǼì²éËüÊÇ·ñ²»ÎªFALSE Èç¹ûº¯Êýʧ°Ü£¬Ôò·µ»ØÖµÍ¨³£ÎªNULL£»·ñÔò£¬HANDLE½«±êʶһ¸ö¿ÉÒÔ²Ù×ݵĶÔÏó¡£Çë×¢ÒâÕâÖÖ·µ»ØÖµ£¬ÒòΪijЩº¯Êý»á·µ»ØÎªINVALID_HANDLE_VALUEµÄÒ»¸ö¾ä±úÖµ£¬Ëü±»¶¨ÒåΪ¨C1¡£º¯ÊýµÄPlatform SDKÎĵµÇå³þ˵Ã÷Á˺¯ÊýÊÇ·µ»ØNULL»¹ÊÇINVALID_HANDLE_VALUEÀ´±êʶʧ°Ü PVOID LONG/DWORD Èç¹ûº¯Êýµ÷ÓÃʧ°Ü£¬Ôò·µ»ØÖµÎªNULL£»·ñÔò£¬PVOID½«±êʶһ¸öÊý¾Ý¿éµÄÄÚ´æµØÖ· ÕâÖÖÀàÐͱȽϼ¬ÊÖ¡£·µ»Ø¼ÆÊýµÄº¯Êýͨ³£»á·µ»ØÒ»¸öLONG»òDWORD¡£Èç¹ûº¯Êý³öÓÚijÖÖÔÒò²»ÄܶÔÎÒÃÇÏëÒª¼ÆÊýµÄ¶«Î÷½øÐмÆÊý£¬Ëüͨ³£»á·µ»Ø0 »ò¨C1(¾ßÌåÈ¡¾öÓÚº¯Êý)¡£Èç¹ûÒªµ÷ÓÃÒ»¸ö·µ»ØLONG/DWORDµÄº¯Êý£¬Îñ±Ø×ÐϸÔĶÁPlatform SDKÎĵµ£¬È·±£ÎÒÃÇ»áÕýÈ·µØ¼ì²é¿ÉÄܳöÏֵĴíÎó ͨ³£Çé¿öÏ£¬Èç¹ûWindowsº¯ÊýÄÜ·µ»Ø´íÎó´úÂ룬½«ÓÐÖúÓÚÎÒÃÇÀí½âº¯Êýµ÷ÓÃΪʲô»áʧ
°Ü¡£Microsoft±à¼ÁËÒ»¸öÁÐ±í£¬ÆäÖÐÁгöÁËËùÓпÉÄܵĴíÎó´úÂ룬²¢ÎªÃ¿¸ö´íÎó´úÂë¶¼·ÖÅäÁËÒ»¸ö32λµÄ±àºÅ¡£
3
(thread-local ÔÚÄÚ²¿£¬µ±Windowsº¯Êý¼ì²âµ½´íÎóʱ£¬Ëü»áʹÓÃÒ»ÖÖÃûΪ¡°Ï̱߳¾µØ´æ´¢Çø¡±
WindowsºËÐıà³Ì(µÚ5°æ)
storage)µÄ»úÖÆ½«ÏàÓ¦µÄ´íÎó´úÂëÓë¡°Ö÷µ÷Ï̡߳±(»òÕß˵·¢³öµ÷ÓõÄỊ̈߳¬¼´calling thread)¹ØÁªµ½Ò»Æð(Ï̱߳¾µØ´æ´¢ÇøµÄÏêÇ齫ÔÚµÚ21ÕÂÌÖÂÛ)¡£ÕâÖÖ»úÖÆÊ¹²»Í¬µÄÏß³ÌÄܶÀÁ¢ÔËÐУ¬²»»á³öÏÖÏ໥¸ÉÈŶԷ½µÄ´íÎó´úÂëµÄÇé¿ö¡£º¯Êý·µ»ØÊ±£¬Æä·µ»ØÖµ»áÖ¸³öÒÑ·¢ÉúÒ»¸ö´íÎó¡£Òª²é¿´¾ßÌåÊÇʲô´íÎó£¬Çëµ÷ÓÃGetLastErrorº¯Êý£¬ÈçÏÂËùʾ£º
DWORD GetLastError();
´Ëº¯ÊýµÄ×÷Óúܼòµ¥£¬¾ÍÊÇ·µ»ØÓÉÉÏÒ»¸öº¯Êýµ÷ÓÃÉèÖõÄÏ̵߳Ä32λ´íÎó´úÂë¡£ ÓÐÁË32λ´íÎó´úÂëÖ®ºó£¬½Ó×ÅÐèÒª°ÑËüת»»Îª¸üÓÐÓõÄÐÅÏ¢¡£WinError.hÍ·Îļþ°üº¬ÁËMicrosoft¶¨ÒåµÄ´íÎó´úÂëÁÐ±í¡£Îª±ãÓÚÌåÑ飬ÏÂÃæÕªÂ¼ÁËÆäÖеÄÒ»²¿·Ö£º
// MessageId: ERROR_SUCCESS //
// MessageText: //
// The operation completed successfully. //
#define ERROR_SUCCESS 0L
#define NO_ERROR 0L // dderror #define SEC_E_OK ((HRESULT)0x00000000L) //
// MessageId: ERROR_INVALID_FUNCTION //
// MessageText: //
// Incorrect function. //
#define ERROR_INVALID_FUNCTION 1L // dderror //
// MessageId: ERROR_FILE_NOT_FOUND //
// MessageText: //
// The system cannot find the file specified. //
#define ERROR_FILE_NOT_FOUND 2L //
// MessageId: ERROR_PATH_NOT_FOUND //
// MessageText: //
// The system cannot find the path specified. //
#define ERROR_PATH_NOT_FOUND 3L //
// MessageId: ERROR_TOO_MANY_OPEN_FILES //
// MessageText: //
// The system cannot open the file. //
#define ERROR_TOO_MANY_OPEN_FILES 4L //
// MessageId: ERROR_ACCESS_DENIED //
// MessageText:
4
//
// Access is denied. //
#define ERROR_ACCESS_DENIED
µÚ1Õ ´íÎó´¦Àí
5L
3~5
¿ÉÒÔ¿´³ö£¬Ã¿¸ö´íÎó¶¼ÓÐÈýÖÖ±íʾ£ºÒ»¸öÏûÏ¢ID(Ò»¸ö¿ÉÔÚÔ´´úÂëÖÐʹÓõĺ꣬ÓÃÓÚÓë
GetLastErrorµÄ·µ»ØÖµ½øÐбȽÏ)¡¢ÏûÏ¢Îı¾(ÃèÊö´íÎóµÄÓ¢ÎÄÎı¾)ºÍÒ»¸ö±àºÅ(Ó¦¸Ã±ÜÃâʹÓô˱àºÅ£¬¾¡Á¿Ê¹ÓÃÏûÏ¢ID)¡£×¢Ò⣬ÕâÀïֻժ¼ÁËWinError.hÍ·ÎļþµÄ¼«Ð¡Ò»²¿·Ö£¬Õû¸öÎļþµÄ³¤¶È³¬¹ý39 000ÐУ¡
Windowsº¯Êýʧ°ÜÖ®ºó£¬Ó¦¸ÃÂíÉϵ÷ÓÃGetLastError£¬ÒòΪ¼ÙÈçÓÖµ÷ÓÃÁËÁíÒ»¸öWindowsº¯Êý£¬Ôò´ËÖµºÜ¿ÉÄܱ»¸Äд¡£×¢Ò⣬³É¹¦µ÷ÓõÄWindowsº¯Êý¿ÉÄÜÓÃERROR_SUCCESS¸Äд´ËÖµ¡£
һЩWindowsº¯Êýµ÷Óóɹ¦¿ÉÄÜÊÇÔµÓÚ²»Í¬µÄÔÒò¡£ÀýÈ磬´´½¨Ò»¸ö¾ßÃûʼþÄں˶ÔÏóʱ£¬ÒÔÏÂÁ½ÖÖÇé¿ö¾ù»á³É¹¦£º¶ÔÏóʵ¼ÊÍê³É´´½¨£¬»òÕß´æÔÚÒ»¸öͬÃûµÄʼþÄں˶ÔÏó¡£Ó¦ÓóÌ
MicrosoftÑ¡Ôñ²ÉÓá°ÉÏÒ»¸ö´íÎó´úÂ롱(last ÐòÒ²ÐíÐèÒªÖªµÀ³É¹¦µÄÔÒò¡£Îª·µ»ØÕâÖÖÐÅÏ¢£¬
error code)»úÖÆ¡£ËùÒÔ£¬Ìض¨º¯Êýµ÷Óóɹ¦Ê±£¬¿ÉÒÔµ÷ÓÃGetLastErrorÀ´È·¶¨¶îÍâµÄÐÅÏ¢¡£
Platform SDKÎĵµ»áÇå³þÖ¸Ã÷ÄÜÒÔÕâÖÖ·½Ê½µ÷ÓÃGetLastError¡£¶ÔÓÚ¾ßÓÐÕâÖÖÐÐΪµÄº¯Êý£¬
ÎĵµÖÐÌṩÁËCreateEventº¯ÊýµÄÒ»¸öÀý×Ó£»Èç¹ûÒѾ´æÔÚ¾ßÃûʼþ£¬¾Í·µ»ØERROR_ALREADY_EXISTS¡£
µ÷ÊÔ³ÌÐòʱ£¬ÎÒ·¢ÏÖ¶ÔÏ̵߳ġ°ÉÏÒ»¸ö´íÎó´úÂ롱½øÐмàÊÓÊÇÏ൱ÓÐÓõġ£ÔÚMicrosoft Visual StudioÖУ¬MicrosoftµÄµ÷ÊÔÆ÷Ö§³ÖÒ»¸öºÜÓÐÓõŦÄÜ¡ª¡ªÎÒÃÇ¿ÉÒÔÅäÖÃWatch(¼àÊÓ)´°¿Ú£¬ÈÃËüʼÖÕÏÔʾÏ̵߳ÄÉÏÒ»¸ö´íÎó´úÂëºÍ´íÎóµÄÎı¾ÃèÊö¡£¾ßÌåµÄ×ö·¨ÊÇ£ºÔÚWatch´°¿ÚÖÐÑ¡ÔñÒ»ÐУ¬È»ºóÊäÈë$err,hr¡£ÎÒÃÇÀ´¿´¿´Í¼1-1µÄÀý×Ó¡£ÔÚÕâ¸öÀý×ÓÖУ¬ÎÒÒѾµ÷ÓÃÁËCreateFileº¯Êý¡£¸Ãº¯Êý·µ»ØÖµÎªINVALID_HANDLE_VALUE (¨C1)µÄÒ»¸öHANDLE£¬Ö¸³öËüÎÞ·¨´ò¿ªÖ¸¶¨Îļþ¡£µ«ÊÇWatch´°¿ÚÖ¸³ö£¬ÉÏÒ»¸ö´íÎó´úÂë(Ò²¾ÍÊǵ÷ÓÃGetLastErrorº¯Êý·µ»ØµÄ´íÎó´úÂë)ÊÇ0x00000002¡£¶à¿÷ÓÐÁË,hrÏÞ¶¨·û£¬Watch´°¿Ú½øÒ»²½Ö¸³ö´íÎó´úÂë2ÊÇ¡°The system cannot find the file specified.¡±(ϵͳÕÒ²»µ½Ö¸¶¨Îļþ)¡£Õâ¾ÍÊÇÔÚWinError.hÍ·ÎļþÖÐΪ´íÎó´úÂë2ÁгöµÄÏûÏ¢Îı¾¡£
5
ͼ1-1 ÔÚVisual StudioµÄWatch´°¿ÚÖÐʹÓÃ$err,hrÀ´²é¿´µ±Ç°Ï̵߳ġ°ÉÏÒ»¸ö´íÎó´úÂ롱
5
WindowsºËÐıà³Ì(µÚ5°æ)
Visual Studio»¹´îÔØÁËÒ»¸öºÜСµÄʵÓóÌÐò£¬ÃûΪError Lookup¡£ÀûÓÃËü£¬¿ÉÒÔ½«´íÎó´úÂëת»»ÎªÏàÓ¦µÄÎı¾ÃèÊö¡£ÈçÏÂͼËùʾ¡£
Èç¹ûÎÒÔÚ×Ô¼ºÐ´µÄ³ÌÐòÖмì²âµ½Ò»¸ö´íÎó£¬ÎÒ¿ÉÄÜÏ£ÍûÏòÓû§ÏÔʾ´íÎóµÄÎı¾ÃèÊö£¬¶ø²»ÊÇÏÔʾһ¸ö¸É°Í°ÍµÄ´íÎó±àºÅ¡£WindowsÌṩÁËÒ»¸öº¯Êý£¬¿ÉÒÔ½«´íÎó´úÂëת»»ÎªÏàÓ¦µÄÎı¾ÃèÊö¡£´Ëº¯ÊýÃûΪFormatMessage£¬ÈçÏÂËùʾ£º
DWORD FormatMessage( DWORD dwFlags, LPCVOID pSource, DWORD dwMessageId, DWORD dwLanguageId, PTSTR pszBuffer, DWORD nSize,
va_list *Arguments);
FormatMessageµÄ¹¦ÄÜʵ¼ÊÏ൱·á¸»£¬ÈôÏëÉú³ÉÏòÓû§ÏÔʾµÄ×Ö·û´®£¬ÄÇôËüÊÇÊ×Ñ¡µÄÒ»
¢Ù
ÖÖ·½Ê½¡£Ö®ËùÒÔ˵ËüºÃÓã¬Ò»¸öÔÒòÊÇËüÄÜÇáËɵØÖ§³Ö¶àÖÖÓïÑÔ¡£ËüÄÜ»ñȡһ¸öÓïÑÔ±êʶ·û×÷Ϊ²ÎÊý£¬²¢·µ»ØÄÇÖÖÓïÑÔµÄÎı¾¡£µ±È»£¬ÎÒÃÇÊ×ÏȱØÐë·Òë×Ö·û´®£¬²¢½«·ÒëºÃµÄÏûÏ¢±í(message table)×ÊԴǶÈë×Ô¼ºµÄ.exe»òDLLÄ£¿éÖС£µ«ÔÚ´ËÖ®ºó£¬Õâ¸öº¯Êý¾ÍÄÜ×Ô¶¯Ñ¡ÔñÕýÈ·µÄ×Ö·û´®¡£ErrorShowʾÀý³ÌÐò(²Î¼ûºóÎÄ)ÑÝʾÁËÈçºÎµ÷ÓÃÕâ¸öº¯Êý½«Microsoft¶¨ÒåµÄ´íÎó´úÂë±àºÅת»»ÎªÏàÓ¦µÄÎı¾ÃèÊö¡£
¾³£ÓÐÈËÎÊÎÒ£¬MicrosoftÊÇ·ñά»¤×ÅÒ»¸öÖ÷¿ØÁÐ±í£¬ÆäÖÐÍêÕûÁгöÁËÿ¸öWindowsº¯Êý¿ÉÄÜ·µ»ØµÄËùÓдíÎó´úÂë¡£ºÜÒź¶£¬´ð°¸ÊÇ·ñ¶¨µÄ¡£¶øÇÒ£¬Microsoft¾ö²»¿ÉÄÜÌṩÕâÑùµÄÁÐ±í£¬ÒòÎªËæ×Åа汾µÄ²Ù×÷ϵͳµÄÎÊÊÀ£¬ÕâÑùµÄÁÐ±í½«ºÜÄѹ¹½¨ºÍά»¤¡£
6
ÕâÖÖÁбíµÄÎÊÌâÔÚÓÚ£¬ÎÒÃÇ¿ÉÒÔµ÷ÓÃÒ»¸öWindowsº¯Êý£¬µ«ÔÚÄÚ²¿£¬Õâ¸öº¯Êý¿ÉÄܵ÷ÓÃÁíÒ»¸öº¯Êý£¬ºóÕßÓÖ¿ÉÄܵ÷ÓÃÆäËûº¯Êý??ÒÔ´ËÀàÍÆ¡£³öÓÚÖÚ¶àÔÒò£¬ÈκÎÒ»¸öº¯Êý¶¼¿ÉÄÜʧ°Ü¡£ÓÐʱ£¬µ±Ò»¸öº¯Êýʧ°Üʱ£¬½Ï¸ß¼¶±ðµÄº¯ÊýÒ²ÐíÄܹ»»Ö¸´£¬²¢¼ÌÐøÖ´ÐÐÎÒÃÇÏ£ÍûµÄ²Ù×÷¡£Òª´´½¨ÕâÖÖÖ÷¿ØÁÐ±í£¬Microsoft±ØÐë¸ú×Ùÿ¸öº¯ÊýµÄ·¾¶£¬Éú³ÉËùÓпÉÄܵĴíÎó´úÂëµÄÁÐ±í¡£ÕâÊǷdz£Äѵġ£¶øÇÒ£¬Ëæ×Åа汾µÄ²Ù×÷ϵͳµÄ·¢²¼£¬ÕâЩº¯ÊýµÄÖ´Ðз¾¶Ò²¿ÉÄÜ·¢Éú¸Ä±ä¡£
¢Ù Òë×¢£ºÕâÀïµÄÓïÑÔÊÇ×ÔÈ»ÓïÑÔ£¬È纺Óï¡¢Ó¢ÓïµÈ£¬¶ø²»ÊǼÆËã»ú±à³ÌÓïÑÔ¡£
6
Ïà¹ØÍÆ¼ö£º