NETMSG.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*++
  2. Copyright 1996 - 1997 Microsoft Corporation
  3. Module Name:
  4.     netmsg.c
  5. Abstract:
  6.     The following sample illustrates how to display error text associated with
  7.     Networking related error codes, in addition to displaying error text
  8.     associated with system related error codes.
  9.     If the supplied error number is in a specific range, the netmsg.dll
  10.     message module is loaded and used to lookup the specified error number
  11.     with the FormatMessage() Win32 API.
  12. Author:
  13.     Scott Field (sfield)    29-Mar-96
  14. --*/
  15. #include <windows.h>
  16. #include <stdio.h>
  17. #include <lmerr.h>
  18. void
  19. DisplayErrorText(
  20.     DWORD dwLastError
  21.     );
  22. #define RTN_OK 0
  23. #define RTN_USAGE 1
  24. #define RTN_ERROR 13
  25. int
  26. __cdecl
  27. main(
  28.     int argc,
  29.     char *argv[]
  30.     )
  31. {
  32.     if(argc != 2) {
  33.         fprintf(stderr,"Usage: %s <error number>n", argv[0]);
  34.         return RTN_USAGE;
  35.     }
  36.     DisplayErrorText( atoi(argv[1]) );
  37.     return RTN_OK;
  38. }
  39. void
  40. DisplayErrorText(
  41.     DWORD dwLastError
  42.     )
  43. {
  44.     HMODULE hModule = NULL; // default to system source
  45.     LPSTR MessageBuffer;
  46.     DWORD dwBufferLength;
  47.     DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER |
  48.         FORMAT_MESSAGE_IGNORE_INSERTS |
  49.         FORMAT_MESSAGE_FROM_SYSTEM ;
  50.     //
  51.     // if dwLastError is in the network range, load the message source
  52.     //
  53.     if(dwLastError >= NERR_BASE && dwLastError <= MAX_NERR) {
  54.         hModule = LoadLibraryEx(
  55.             TEXT("netmsg.dll"),
  56.             NULL,
  57.             LOAD_LIBRARY_AS_DATAFILE
  58.             );
  59.         if(hModule != NULL)
  60.             dwFormatFlags |= FORMAT_MESSAGE_FROM_HMODULE;
  61.     }
  62.     //
  63.     // call FormatMessage() to allow for message text to be acquired
  64.     // from the system or the supplied module handle
  65.     //
  66.     if(dwBufferLength = FormatMessageA(
  67.         dwFormatFlags,
  68.         hModule, // module to get message from (NULL == system)
  69.         dwLastError,
  70.         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language
  71.         (LPSTR) &MessageBuffer,
  72.         0,
  73.         NULL
  74.         ))
  75.     {
  76.         DWORD dwBytesWritten;
  77.         //
  78.         // Output message string on stderr
  79.         //
  80.         WriteFile(
  81.             GetStdHandle(STD_ERROR_HANDLE),
  82.             MessageBuffer,
  83.             dwBufferLength,
  84.             &dwBytesWritten,
  85.             NULL
  86.             );
  87.         //
  88.         // free the buffer allocated by the system
  89.         //
  90.         LocalFree(MessageBuffer);
  91.     }
  92.     //
  93.     // if we loaded a message source, unload it
  94.     //
  95.     if(hModule != NULL)
  96.         FreeLibrary(hModule);
  97. }