[DllImport("kernel32.dll")]
private unsafe static extern int FormatMessage(
uint dwFlags, // source and processing options
int* lpSource, // message source
uint dwMessageId, // message identifier
uint dwLanguageId, // language identifier
char* MsgBuffer, // message buffer
int nSize, // maximum size of message buffer
byte[] Arguments // array of message inserts
);
[DllImport("kernel32.dll")]
private unsafe static extern int* LoadLibraryEx(
string lpFileName, // file name of module
int[] hFile, // reserved, must be NULL
uint dwFlags // entry-point execution option
);
public unsafe string GetMessage(int LastErr)
{
uint dwLastError = (uint)LastErr;
int* hModule = null; // default to system source
char* MessageBuffer = null;
int dwBufferLength;
string sMsg = "";
uint dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_IGNORE_INSERTS |
FORMAT_MESSAGE_FROM_SYSTEM ;
//
// If dwLastError is in the network range,
// load the message source.
//
if(dwLastError >= NERR_BASE && dwLastError <= MAX_NERR)
{
hModule = LoadLibraryEx("netmsg.dll", null, LOAD_LIBRARY_AS_DATAFILE);
if(null != hModule)
dwFormatFlags |= FORMAT_MESSAGE_FROM_HMODULE;
}
//
// Call FormatMessage() to allow for message
// text to be acquired from the system
// or from the supplied module handle.
//
dwBufferLength = FormatMessage(dwFormatFlags,
hModule, // module to get message from (NULL == system)
dwLastError,
LANGID, // default language
MessageBuffer,
0,
null);
// if(0 != dwBufferLength)
// sMsg = (string) *MessageBuffer;
return sMsg;
}
}