Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Někdy je nutné zobrazit text chyby související s kódy chyb vrácenými ze síťových funkcí. Tuto úlohu možná budete muset provést pomocí funkcí pro správu sítě poskytovaných systémem.
Text chyby pro tyto zprávy se nachází v souboru tabulky zpráv s názvem Netmsg.dll, který se nachází v %systemroot%\system32. Tento soubor obsahuje chybové zprávy v oblasti NERR_BASE (2100) až MAX_NERR(NERR_BASE+899). Tyto kódy chyb jsou definovány v souboru hlaviček sady SDK lmerr.h.
Funkce LoadLibrary a LoadLibraryEx mohou načíst Netmsg.dll. Funkce FormatMessage mapuje kód chyby na text zprávy s ohledem na popisovač modulu k souboru Netmsg.dll.
Následující ukázka ukazuje, jak zobrazit text chyby přidružený k funkcím pro správu sítě, kromě zobrazení textu chyby spojeného s kódy chyb souvisejících se systémem. Pokud je zadané číslo chyby v určitém rozsahu, načte se modul netmsg.dll zpráv a použije se k vyhledání zadaného čísla chyby pomocí funkce FormatMessage.
#include <windows.h>
#include <stdio.h>
#include <lmerr.h>
void
DisplayErrorText(
DWORD dwLastError
);
#define RTN_OK 0
#define RTN_USAGE 1
#define RTN_ERROR 13
int
__cdecl
main(
int argc,
char *argv[]
)
{
if(argc != 2) {
fprintf(stderr,"Usage: %s <error number>\n", argv[0]);
return RTN_USAGE;
}
DisplayErrorText( atoi(argv[1]) );
return RTN_OK;
}
void
DisplayErrorText(
DWORD dwLastError
)
{
HMODULE hModule = NULL; // default to system source
LPSTR MessageBuffer;
DWORD dwBufferLength;
DWORD 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(
TEXT("netmsg.dll"),
NULL,
LOAD_LIBRARY_AS_DATAFILE
);
if(hModule != NULL)
dwFormatFlags |= FORMAT_MESSAGE_FROM_HMODULE;
}
//
// Call FormatMessage() to allow for message
// text to be acquired from the system
// or from the supplied module handle.
//
if(dwBufferLength = FormatMessageA(
dwFormatFlags,
hModule, // module to get message from (NULL == system)
dwLastError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language
(LPSTR) &MessageBuffer,
0,
NULL
))
{
DWORD dwBytesWritten;
//
// Output message string on stderr.
//
WriteFile(
GetStdHandle(STD_ERROR_HANDLE),
MessageBuffer,
dwBufferLength,
&dwBytesWritten,
NULL
);
//
// Free the buffer allocated by the system.
//
LocalFree(MessageBuffer);
}
//
// If we loaded a message source, unload it.
//
if(hModule != NULL)
FreeLibrary(hModule);
}
Po kompilaci tohoto programu můžete vložit číslo kódu chyby jako argument a program zobrazí text. Například:
C:\> netmsg 2453
Could not find domain controller for this domain