Ê×Ò³ > ϵͳ > ÆäËû > ÕýÎÄ
windows ´íÎó´¦Àí
2017-07-25 11:11:16       ¸öÆÀÂÛ    À´Ô´£ºgod_wenµÄ²©¿Í  
ÊÕ²Ø    ÎÒҪͶ¸å

windowsΪ´íÎó´¦ÀíÌṩÁ˺ܶຯÊý¡£

GetLastError

Ê×ÏȳýÁËGetLastError»¹ÓÐÒ»¸öGetLastErrorExº¯Êý¡£µ«ÊÇÏÖÔÚ
GetLastErrorExºÍGetLastError¶¼ÊÇÏàͬµÄÁË¡£ËùÒÔGetLastErrorExµÄµÚ¶þ²ÎÊý±»ºöÂÔÁË¡£

GetLastErrorº¯ÊýÀ´ÈÃÎÒÃǼì²éº¯Êý²Ù×÷ʱ²úÉúµÄ´íÎó¡£ËüʹÓÃÒ»ÖÖ½Ð×ö“Ï̱߳¾µØ´æ´¢Çø”£¨thread-local storage£©µÄ»úÖÆ½«ÏàÓ¦µÄ´íÎó´úÂëºÍÖ÷µ÷Ï̹߳ØÁªµ½Ò»Æð¡£
ͨ³£ÎÒÃÇʹÓÃÕâ¸öº¯ÊýÖ»ÐèÒªÀàËÆÏÂÃæÕâÑù¾Í¿ÉÒÔÁË¡£

    HANDLE file = CreateFile(TEXT("C:\\test.txt"), 0, 0, nullptr, OPEN_EXISTING, 0, nullptr);

    DWORD dwResoult=GetLastError();
    switch (dwResoult) {


        //...

    }

ËùÓеĴíÎóÂë¶¼ÔÚWinErrorÖж¨Òå×Å£¨±»Windows.h°üÀ¨£©¡£µ±È»ÏëÈ«²¿¼ÇÏÂÀ´ÊDz»¿ÉÄܵÄÖ»Äܱßѧϰ±ß»ýÀÛÁË¡£

ΪÁËÎÒÃǵ÷ÊÔ³ÌÐòµÄ·½±ãvisual studioΪÎÒÃÇÌṩÁËÏàÓ¦µÄ¹¤¾ßÀ´²é¿´´íÎóÂë¡£
¼àÊÓ´°¿Ú
ÎÒÃÇÖ»ÐèÒª´òÉ϶ϵãÈ»ºóÔÚ¼àÊÓ´°¿Ú£¨watch£©Ð´ÈëÏÂÃæÎ±±äÁ¿¾Í¿ÉÒԲο¼¶Ïµã´¦µÄGetLastError·µ»ØµÄ½á¹ûÁË¡£

ÕâÀïдͼƬÃèÊö

ºÜ·½±ã »¹»á×Ô¶¯·­Òë³ÉÎÒÃǵÄÓïÑÔ¡£
Èç¹ûÏëÁ˽âÍæÊ²Ã´¼àÊÓ´®¿ÚÍæÊ²Ã´»áÏÔʾ£¿£¿£¿¿ÉÒԲο¼ÏÂÃæÁ´½Ó£¨ÒªvpnµÄ£©
https://stackoverflow.com/questions/4001023/what-do-question-marks-in-visual-studio-watch-window-signify

´íÎó²éÕÒ
windows »¹ÓÐÒ»¸öС¹¤¾ß¿ÉÒԲ鿴ÏàÓ¦´íÎóÂëÊÇʲôÒâ˼
ÕâÀïдͼƬÃèÊö

ÕâÀïдͼƬÃèÊö
µ«ÊÇÖ»ÄÜÊäÈëÊý×Ö£¬²»ÄÜÊäÈëºêŶ¡£

ÏàÓ¦µÄAPI
µ±È»Èç¹ûÏëʵÏÖÉÏÃæµÄ¹¤¾ßµÄ»°windows Ò²ÌṩÁËÏàÓ¦µÄapi¡£
Ê×ÏÈÎÒÃÇÒªÓÃGetLastErrZ†·Ÿ"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcsC0u/G1w7TtzvPC66OoRFdPUkTWtaOpoaPIu7rzvs3Tw7W9z8LD5rXEuq/K/cHLPC9wPg0KPHByZSBjbGFzcz0="brush:java;"> //ÏÂÃæÊÇUNICODE°æ±¾µÄ WINBASEAPI _Success_(return != 0) DWORD WINAPI FormatMessageW( _In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _When_((dwFlags & FORMAT_MESSAGE_ALLOCATE_BUFFER) != 0, _At_((LPWSTR*)lpBuffer, _Outptr_result_z_)) _When_((dwFlags & FORMAT_MESSAGE_ALLOCATE_BUFFER) == 0, _Out_writes_z_(nSize)) LPWSTR lpBuffer, _In_ DWORD nSize, _In_opt_ va_list *Arguments );

ÆäʵÕâ¸öº¯ÊýµÄ¹¦ÄÜÊÇͨ¹ýÓïÑÔ±êʶ·ûÀ´Ñ°ÕÒÏàÓ¦µÄÓïÑÔÎı¾È»ºó·µ»Ø¸ÃÎı¾¡£ËùÒÔÎÒÃDZØÐëÏÈ·­Òë×Ö·û´®£¬È»ºó°Ñ²¢°Ñ·­ÒëºÃµÄÏûÏ¢±í£¨message table£©×ÊԴǶÔÚ.exe»òÕßDLLÄ£¿éµÄÖС£
Èç¹ûÏ£Íû´©¼þÐÅÏ¢±í¿ÉÒÔʹÓÃMessage Compiler(MC.exe)¡£»òÕßÉÏÃæ´íÎó²éÕÒ¹¤¾ßµÄij¿é°´Å¥

dwFlags
ÉèÖÃһЩӰÏ캯Êý¹¤×÷µÄ±ê¼Ç¡£Ò»°ã¾ÍÊÇÏÂÃæÈý¸ö±ê¼Ç

FORMAT_MESSAGE_ALLOCATE_BUFFER | £º·ÖÅäÒ»¿éÄÜÈÝÏ·­ÒëÍêµÄ×Ö·û´®£¬µØÖ·¾ÍÊÇlpBuffer²ÎÊý·µ»ØµÄÖµ FORMAT_MESSAGE_FROM_SYSTEM |£º»ñµÃϵͳ¶¨ÒåµÄ´íÎó´úÂë¶ÔÓ¦µÄ×Ö·û´® FORMAT_MESSAGE_IGNORE_INSERTS£º×Ö·û´®ÖпÉÒÔ³öÏÖ%ºÅ¡£Õâ¸ö¾ÍÏñprintfº¯ÊýÒ»ÑùÎÒÃÇʹÓÃ%À´Õ¼Î»£¬µ«ÊÇÒòΪÓеÄÒì³£»á³öÏÖ%ºÅÀ´ÏÔʾһЩÉ豸ÐÅÏ¢Ëù¡£Èç¹ûÉèÖÃÕâ¸ö²ÎÊý£¬³öÏÖ%ºÅʱArguments²ÎÊý¾ÍÒªÌṩÏàÓ¦µÄռλ·ûÖµÁË

lpSource
ÎÒÃǵÄÏûÏ¢±íµØÖ·¡£Èç¹ûʹÓÃϵͳµÄ´íÎóÂëµÄ»°ÉèÖÃΪnullptr¾ÍÐÐÁË¡£
dwMessageId
Ö¸³öÏëÒª²éÕҵĴíÎóÂëID
dwLanguageId
ʹÓÃʲôÓïÑÔÀ´ÏÔʾ.
lpBuffer
·­ÒëÍêµÄ×Ö·û´®´æ´¢µÄµØ·½
nSize
Èç¹ûûÓÐÉèÖÃFORMAT_MESSAGE_ALLOCATE_BUFFERÖµ¾Í»á·µ»ØÐèÒª»º³åÇøµÄ´óС£¨ºÍ×Ö·û´®´¦Àíº¯ÊýÒ»Ñù£©¡£Èç¹ûÉèÖÃÁ˾ͻ᷵»ØÆäÖÐ×Ö·ûµÄ¶àÉÙ¸ö¡£
Arguments
Ϊռλ·ûÌṩÐÅÏ¢

ÏÂÃæÊÇÎÒ´ÓmsdnÉϰÎÏÂÀ´µÄÒ»¸öÀý×Ó

#include 
#include 

void ErrorExit(LPTSTR lpszFunction) 
{ 
    // Retrieve the system error message for the last-error code

    LPVOID lpMsgBuf;
    LPVOID lpDisplayBuf;

    DWORD dw = GetLastError(); 

    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        dw,
        //MAKELANGIDºê»á°ÑLANG_NEUTRAL£¬SUBLANG_DEFAULTÈà³ÉÒ»¸öÊý£¬Õâ¸öÊý¾ÍÊÇ0±íʾʹÓÃϵͳĬÈϵÄÓïÑÔ
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0, NULL );

    // Display the error message and exit the process

    lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, 
        (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); 
    StringCchPrintf((LPTSTR)lpDisplayBuf, 
        LocalSize(lpDisplayBuf) / sizeof(TCHAR),
        TEXT("%s failed with error %d: %s"), 
        lpszFunction, dw, lpMsgBuf); 
    MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); 

    LocalFree(lpMsgBuf);
    LocalFree(lpDisplayBuf);
    ExitProcess(dw); 
}

void main()
{
    // Generate an error

    if(!GetProcessId(NULL))
        ErrorExit(TEXT("GetProcessId"));
}

×Ô¶¨Òå´íÎóÂë

µ±ÎÒÃÇÏëʹÓÃ×Ô¼ºµÄ´íÎóÂëʱ¿ÉÒÔʹÓÃSetLastErrorº¯ÊýÀ´ÉèÖôíÎóÂë¡£µ«ÊÇÇë×ñÊØÏÂÃæµÄ¹æ¶¨

´íÎó´úÂëµÄ²»Í¬×Ö¶Îλ£º

 

´íÎó´úÂëµÄ²»Í¬×Ö¶Îλ£º

31–30

 

 

29

 

 

28

 

 

27–16

 

 

15–0

 

 

ÄÚÈÝ

 

ÑÏÖØÐÔ

 

Microsoft/

 

¿Í»§

±£Áô

 

Facility

 

´úÂë

Òì³£´úÂë

 

º¬Òå

 

0 =

 

³É¹¦

1 =

 

ÐÅÏ¢(Ìáʾ)

2 =

 

¾¯¸æ

3 =

 

´íÎó

0 = Microsoft

 

¶¨ÒåµÄ´úÂë

1 =

 

¿Í»§¶¨ÒåµÄ´úÂë

±ØÐëΪ

0

ǰ

256¸öÖµÓÉMicrosoft±£Áô

Microsoft/

 

¿Í»§¶¨ÒåµÄ´úÂë


µã»÷¸´ÖÆÁ´½Ó ÓëºÃÓÑ·ÖÏí!»Ø±¾Õ¾Ê×Ò³
ÉÏһƪ£ºÔÚwps2016ÖÐʹÓÃÃâ·ÑÐÂÄ£°åµÄ·½·¨
ÏÂһƪ£ºÔÚExcel±í¸ñÖÐÖÆ×÷³ýϦµ¹×Ô¶¯¼ÆÊ±ÅƵķ½·¨
Ïà¹ØÎÄÕÂ
ͼÎÄÍÆ¼ö
ÎÄÕÂ
ÍÆ¼ö
ÈÈÃÅÐÂÎÅ

¹ØÓÚÎÒÃÇ | ÁªÏµÎÒÃÇ | ¹ã¸æ·þÎñ | Ͷ×ʺÏ×÷ | °æÈ¨ÉêÃ÷ | ÔÚÏß°ïÖú | ÍøÕ¾µØÍ¼ | ×÷Æ··¢²¼ | Vip¼¼ÊõÅàѵ
°æÈ¨ËùÓÐ: ºìºÚÁªÃË--ÖÂÁ¦ÓÚ×öʵÓõÄIT¼¼ÊõÑ§Ï°ÍøÕ¾