DWORD FormatMessage(
DWORD dwFlags, // source and processing options
LPCVOID lpSource, // message source
DWORD dwMessageId, // message identifier
DWORD dwLanguageId, // language identifier
LPTSTR lpBuffer, // message buffer
DWORD nSize, // maximum size of message buffer
va_list *Arguments // array of message inserts
);
LPTSTR lpBuffer, // message buffer , 缓冲区地址
long dwFormatFlags
long NULL
string MessageBuffer
long dwLastError
long nLen
string pText
long lpAddr
constant Long FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
constant Long FORMAT_MESSAGE_IGNORE_INSERTS = 512
constant Long FORMAT_MESSAGE_FROM_SYSTEM = 4096
setnull(NULL)
dwFormatFlags =bitor( FORMAT_MESSAGE_ALLOCATE_BUFFER,FORMAT_MESSAGE_IGNORE_INSERTS, FORMAT_MESSAGE_FROM_SYSTEM) ;
lpAddr= Addr(MessageBuffer)
nLen = FormatMessage(dwFormatFlags, NULL,dwLastError,1024, lpAddr,0,NULL)
if nLen <= 0 then return ""
pText = space(nLen + 1 )
memcpy(pText,lpAddr,nlen)
LocalFree(lpAddr)
return pText
本文深入解析了Windows API中的FormatMessage函数,介绍了如何使用它从系统消息表中获取错误信息。通过设置不同的标志,如FORMAT_MESSAGE_ALLOCATE_BUFFER、FORMAT_MESSAGE_IGNORE_INSERTS和FORMAT_MESSAGE_FROM_SYSTEM,可以动态分配缓冲区并获取详尽的错误描述。最后展示了如何处理返回的错误信息,并释放内存。
1251

被折叠的 条评论
为什么被折叠?



