zoukankan      html  css  js  c++  java
  • Windows API 之 FormatMessage

    • FormatMessage

    Formats a message string. The function requires a message definition as input. The message definition can come from a buffer passed into the function. It can come from a message table resource in an already-loaded module. Or the caller can ask the function to search the system's message table resource(s) for the message definition. The function finds the message definition in a message table resource based on a message identifier and a language identifier. The function copies the formatted message text to an output buffer, processing any embedded insert sequences if requested.

    DWORD WINAPI FormatMessage(
      _In_     DWORD   dwFlags,
      _In_opt_ LPCVOID lpSource,
      _In_     DWORD   dwMessageId,
      _In_     DWORD   dwLanguageId,
      _Out_    LPTSTR  lpBuffer,
      _In_     DWORD   nSize,
      _In_opt_ va_list *Arguments
    );

    dwMessageId [in]

    The message identifier for the requested message. This parameter is ignored if dwFlags includes FORMAT_MESSAGE_FROM_STRING.

    lpBuffer [out]

    A pointer to a buffer that receives the null-terminated string that specifies the formatted message.If dwFlags includesFORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in lpBuffer.

    Return value

    If the function succeeds, the return value is the number of TCHARs stored in the output buffer, excluding the terminating null character.

    If the function fails, the return value is zero. To get extended error information, call GetLastError.

    举例:

    #include <iostream>
    #include <windows.h>
    #include <strsafe.h>
    
    int main()
    {
        LPCTSTR lpszFunction = "GetProcessId";
        LPVOID lpMsgBuff = NULL;
        LPVOID lpDisplayBuff = NULL;
        DWORD dwError = GetLastError();
        FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
            FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            dwError,  //输入的错误编号
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR)&lpMsgBuff,  //得到错误说明
            0, NULL);
    lpDisplayBuff
    = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuff) + lstrlen((LPCTSTR)lpszFunction) + 40)*sizeof(TCHAR));  //为StringCchPrintf初始化Buffer StringCchPrintf((LPTSTR)lpDisplayBuff,  //StringCcPrintf用来格式化字符串 LocalSize(lpDisplayBuff), TEXT("%s failed with error %d: %s"), lpszFunction, dwError, lpMsgBuff); MessageBox(NULL, (LPCTSTR)lpDisplayBuff, TEXT("Error"), MB_OK); LocalFree(lpDisplayBuff); system("pause"); return 0; }

     输出结果:

     

    参考:

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx

    http://blog.csdn.net/zhao_yin/article/details/6989495

  • 相关阅读:
    穿越之我是码农 1024 篇
    误删文件机房停电黑客入侵_你最怕什么?
    AI觉醒进行时:程序员你怕了吗?
    未来已来!阿里小蜜AI技术揭秘
    千人千面智能淘宝店铺背后的算法研究登陆人工智能顶级会议AAAI 2017
    CDN缓存不命中排查
    现实需求巨大_技术尚未成熟_学界与业界思维大碰撞
    围观阿里云最会赚钱的人!价值2万元邀请码不限量发送
    今晚19:30直播阿里巴巴大规模持续集成的技术演进之路_欢迎免费观看
    工作压力山大?码农这么减压最有效
  • 原文地址:https://www.cnblogs.com/predator-wang/p/4985021.html
Copyright © 2011-2022 走看看