dxerr.c
上传用户:xuyinpeng
上传日期:2021-05-12
资源大小:455k
文件大小:27k
源码类别:

射击游戏

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////////////
  2. // DirectX Includes...
  3. /////////////////////////////////////////////////////////////////////////////////////
  4. #include <stdio.h>
  5. #include <ddraw.h>
  6. #include <dinput.h>
  7. #include <dsound.h>
  8. void WriteDebug(char *);
  9. void DS_Error( HRESULT hresult, char *msg )
  10.    {
  11.     char msgtext[128];
  12.     char errmsg[128];
  13.     switch(hresult)
  14.        {
  15.         case DS_OK:
  16.              strcpy(errmsg,"The request completed successfully.");
  17.              break;
  18.         case DSERR_ALLOCATED:
  19.              strcpy(errmsg,"The request failed because resources, such as a priority level, were already in use by another caller.");
  20.              break;
  21.         case DSERR_ALREADYINITIALIZED:
  22.              strcpy(errmsg,"The object is already initialized.");
  23.              break;
  24.         case DSERR_BADFORMAT:
  25.              strcpy(errmsg,"The specified wave format is not supported.");
  26.              break;
  27.         case DSERR_BUFFERLOST:
  28.              strcpy(errmsg,"The buffer memory has been lost and must be restored.");
  29.              break;
  30.         case DSERR_CONTROLUNAVAIL:
  31.              strcpy(errmsg,"The control (volume, pan, and so forth) requested by the caller is not available.");
  32.              break;
  33.         case DSERR_GENERIC:
  34.              strcpy(errmsg,"An undetermined error occurred inside the DirectSound subsystem.");
  35.              break;
  36.         case DSERR_INVALIDCALL:
  37.              strcpy(errmsg,"This function is not valid for the current state of this object.");
  38.              break;
  39.         case DSERR_INVALIDPARAM:
  40.              strcpy(errmsg,"An invalid parameter was passed to the returning function.");
  41.              break;
  42.         case DSERR_NOAGGREGATION:
  43.              strcpy(errmsg,"The object does not support aggregation.");
  44.              break;
  45.         case DSERR_NODRIVER:
  46.              strcpy(errmsg,"No sound driver is available for use.");
  47.              break;
  48.         case DSERR_OTHERAPPHASPRIO:
  49.              strcpy(errmsg,"This value is obsolete and is not used.");
  50.              break;
  51.         case DSERR_OUTOFMEMORY:
  52.              strcpy(errmsg,"The DirectSound subsystem could not allocate sufficient memory to complete the caller's request.");
  53.              break;
  54.         case DSERR_PRIOLEVELNEEDED:
  55.              strcpy(errmsg,"The caller does not have the priority level required for the function to succeed.");
  56.              break;
  57.         case DSERR_UNINITIALIZED:
  58.              strcpy(errmsg,"The IDirectSound::Initialize method has not been called or has not been called successfully before other methods were called.");
  59.              break;
  60.         case DSERR_UNSUPPORTED:
  61.              strcpy(errmsg,"The function called is not supported at this time.");
  62.              break;
  63.         default:
  64.              sprintf(errmsg,"Unknown Error Code: %04X", hresult);
  65.              strcpy(errmsg, msgtext);
  66.              break;
  67.        }
  68.     sprintf(msgtext, "DSERR: %sn", errmsg);
  69.     WriteDebug( msgtext );
  70.     sprintf(msgtext, "%s FAILEDn", msg);
  71.     WriteDebug( msgtext );
  72.    }
  73. void DD_Error( HRESULT hresult, char *msg )
  74.    {
  75.     static char msgtext[128];
  76.     static char errmsg[128];
  77.     switch(hresult)
  78.        {
  79.         case DD_OK:
  80.              strcpy(errmsg,"The request completed successfully.");
  81.              break;
  82.         case DDERR_ALREADYINITIALIZED:
  83.              strcpy(errmsg,"The object has already been initialized.");
  84.              break;
  85.         case DDERR_BLTFASTCANTCLIP:
  86.              strcpy(errmsg,"A DirectDrawClipper object is attached to a source surface that has passed into a call to the IDirectDrawSurface2::BltFast method.");
  87.              break;
  88.         case DDERR_CANNOTATTACHSURFACE:
  89.              strcpy(errmsg,"A surface cannot be attached to another requested surface.");
  90.              break;
  91.         case DDERR_CANNOTDETACHSURFACE:
  92.              strcpy(errmsg,"A surface cannot be detached from another requested surface.");
  93.              break;
  94.         case DDERR_CANTCREATEDC:
  95.              strcpy(errmsg,"Windows cannot create any more device contexts (DCs).");
  96.              break;
  97.         case DDERR_CANTDUPLICATE:
  98.              strcpy(errmsg,"Primary and 3D surfaces, or surfaces that are implicitly created, cannot be duplicated.");
  99.              break;
  100.         case DDERR_CANTLOCKSURFACE:
  101.              strcpy(errmsg,"Access to this surface is refused because an attempt was made to lock the primary surface without DCI support.");
  102.              break;
  103.         case DDERR_CANTPAGELOCK:
  104.              strcpy(errmsg,"An attempt to page lock a surface failed. Page lock will not work on a display-memory surface or an emulated primary surface.");
  105.              break;
  106.         case DDERR_CANTPAGEUNLOCK:
  107.              strcpy(errmsg,"An attempt to page unlock a surface failed. Page unlock will not work on a display-memory surface or an emulated primary surface.");
  108.              break;
  109.         case DDERR_CLIPPERISUSINGHWND:
  110.              strcpy(errmsg,"An attempt was made to set a clip list for a DirectDrawClipper object that is already monitoring a window handle.");
  111.              break;
  112.         case DDERR_COLORKEYNOTSET:
  113.              strcpy(errmsg,"No source color key is specified for this operation.");
  114.              break;
  115.         case DDERR_CURRENTLYNOTAVAIL:
  116.              strcpy(errmsg,"No support is currently available.");
  117.              break;
  118.         case DDERR_DCALREADYCREATED:
  119.              strcpy(errmsg,"A device context (DC) has already been returned for this surface. Only one DC can be retrieved for each surface.");
  120.              break;
  121.         case DDERR_DIRECTDRAWALREADYCREATED:
  122.              strcpy(errmsg,"A DirectDraw object representing this driver has already been created for this process.");
  123.              break;
  124.         case DDERR_EXCEPTION:
  125.              strcpy(errmsg,"An exception was encountered while performing the requested operation.");
  126.              break;
  127.         case DDERR_EXCLUSIVEMODEALREADYSET:
  128.              strcpy(errmsg,"An attempt was made to set the cooperative level when it was already set to exclusive.");
  129.              break;
  130.         case DDERR_GENERIC:
  131.              strcpy(errmsg,"There is an undefined error condition.");
  132.              break;
  133.         case DDERR_HEIGHTALIGN:
  134.              strcpy(errmsg,"The height of the provided rectangle is not a multiple of the required alignment.");
  135.              break;
  136.         case DDERR_HWNDALREADYSET:
  137.              strcpy(errmsg,"The DirectDraw cooperative level window handle has already been set. It cannot be reset while the process has surfaces or palettes created.");
  138.              break;
  139.         case DDERR_HWNDSUBCLASSED:
  140.              strcpy(errmsg,"DirectDraw is prevented from restoring state because the DirectDraw cooperative level window handle has been subclassed.");
  141.              break;
  142.         case DDERR_IMPLICITLYCREATED:
  143.              strcpy(errmsg,"The surface cannot be restored because it is an implicitly created surface.");
  144.              break;
  145.         case DDERR_INCOMPATIBLEPRIMARY:
  146.              strcpy(errmsg,"The primary surface creation request does not match with the existing primary surface.");
  147.              break;
  148.         case DDERR_INVALIDCAPS:
  149.              strcpy(errmsg,"One or more of the capability bits passed to the callback function are incorrect.");
  150.              break;
  151.         case DDERR_INVALIDCLIPLIST:
  152.              strcpy(errmsg,"DirectDraw does not support the provided clip list.");
  153.              break;
  154.         case DDERR_INVALIDDIRECTDRAWGUID:
  155.              strcpy(errmsg,"The globally unique identifier (GUID) passed to the DirectDrawCreate function is not a valid DirectDraw driver identifier.");
  156.              break;
  157.         case DDERR_INVALIDMODE:
  158.              strcpy(errmsg,"DirectDraw does not support the requested mode.");
  159.              break;
  160.         case DDERR_INVALIDOBJECT:
  161.              strcpy(errmsg,"DirectDraw received a pointer that was an invalid DirectDraw object.");
  162.              break;
  163.         case DDERR_INVALIDPARAMS:
  164.              strcpy(errmsg,"One or more of the parameters passed to the method are incorrect.");
  165.              break;
  166.         case DDERR_INVALIDPIXELFORMAT:
  167.              strcpy(errmsg,"The pixel format was invalid as specified.");
  168.              break;
  169.         case DDERR_INVALIDPOSITION:
  170.              strcpy(errmsg,"The position of the overlay on the destination is no longer legal.");
  171.              break;
  172.         case DDERR_INVALIDRECT:
  173.              strcpy(errmsg,"The provided rectangle was invalid.");
  174.              break;
  175.         case DDERR_INVALIDSURFACETYPE:
  176.              strcpy(errmsg,"The requested operation could not be performed because the surface was of the wrong type.");
  177.              break;
  178.         case DDERR_LOCKEDSURFACES:
  179.              strcpy(errmsg,"One or more surfaces are locked, causing the failure of the requested operation.");
  180.              break;
  181.         case DDERR_NO3D:
  182.              strcpy(errmsg,"No 3D hardware or emulation is present.");
  183.              break;
  184.         case DDERR_NOALPHAHW:
  185.              strcpy(errmsg,"No alpha acceleration hardware is present or available, causing the failure of the requested operation.");
  186.              break;
  187.         case DDERR_NOBLTHW:
  188.              strcpy(errmsg,"No blitter hardware is present.");
  189.              break;
  190.         case DDERR_NOCLIPLIST:
  191.              strcpy(errmsg,"No clip list is available.");
  192.              break;
  193.         case DDERR_NOCLIPPERATTACHED:
  194.              strcpy(errmsg,"No DirectDrawClipper object is attached to the surface object.");
  195.              break;
  196.         case DDERR_NOCOLORCONVHW:
  197.              strcpy(errmsg,"The operation cannot be carried out because no color-conversion hardware is present or available.");
  198.              break;
  199.         case DDERR_NOCOLORKEY:
  200.              strcpy(errmsg,"The surface does not currently have a color key.");
  201.              break;
  202.         case DDERR_NOCOLORKEYHW:
  203.              strcpy(errmsg,"The operation cannot be carried out because there is no hardware support for the destination color key.");
  204.              break;
  205.         case DDERR_NOCOOPERATIVELEVELSET:
  206.              strcpy(errmsg,"A create function is called without the IDirectDraw2::SetCooperativeLevel method being called.");
  207.              break;
  208.         case DDERR_NODC:
  209.              strcpy(errmsg,"No DC has ever been created for this surface.");
  210.              break;
  211.         case DDERR_NODDROPSHW:
  212.              strcpy(errmsg,"No DirectDraw raster operation (ROP) hardware is available.");
  213.              break;
  214.         case DDERR_NODIRECTDRAWHW:
  215.              strcpy(errmsg,"Hardware-only DirectDraw object creation is not possible; the driver does not support any hardware.");
  216.              break;
  217.         case DDERR_NODIRECTDRAWSUPPORT:
  218.              strcpy(errmsg,"DirectDraw support is not possible with the current display driver.");
  219.              break;
  220.         case DDERR_NOEMULATION:
  221.              strcpy(errmsg,"Software emulation is not available.");
  222.              break;
  223.         case DDERR_NOEXCLUSIVEMODE:
  224.              strcpy(errmsg,"The operation requires the application to have exclusive mode, but the application does not have exclusive mode.");
  225.              break;
  226.         case DDERR_NOFLIPHW:
  227.              strcpy(errmsg,"Flipping visible surfaces is not supported.");
  228.              break;
  229.         case DDERR_NOGDI:
  230.              strcpy(errmsg,"No GDI is present.");
  231.              break;
  232.         case DDERR_NOHWND:
  233.              strcpy(errmsg,"Clipper notification requires a window handle, or no window handle has been previously set as the cooperative level window handle.");
  234.              break;
  235.         case DDERR_NOMIPMAPHW:
  236.              strcpy(errmsg,"The operation cannot be carried out because no mipmap texture mapping hardware is present or available.");
  237.              break;
  238.         case DDERR_NOMIRRORHW:
  239.              strcpy(errmsg,"The operation cannot be carried out because no mirroring hardware is present or available.");
  240.              break;
  241.         case DDERR_NOOVERLAYDEST:
  242.              strcpy(errmsg,"The IDirectDrawSurface2::GetOverlayPosition method is called on an overlay that the IDirectDrawSurface2::UpdateOverlay method has not been called on to establish a destination.");
  243.              break;
  244.         case DDERR_NOOVERLAYHW:
  245.              strcpy(errmsg,"The operation cannot be carried out because no overlay hardware is present or available.");
  246.              break;
  247.         case DDERR_NOPALETTEATTACHED:
  248.              strcpy(errmsg,"No palette object is attached to this surface.");
  249.              break;
  250.         case DDERR_NOPALETTEHW:
  251.              strcpy(errmsg,"There is no hardware support for 16- or 256-color palettes.");
  252.              break;
  253.         case DDERR_NORASTEROPHW:
  254.              strcpy(errmsg,"The operation cannot be carried out because no appropriate raster operation hardware is present or available.");
  255.              break;
  256.         case DDERR_NOROTATIONHW:
  257.              strcpy(errmsg,"The operation cannot be carried out because no rotation hardware is present or available.");
  258.              break;
  259.         case DDERR_NOSTRETCHHW:
  260.              strcpy(errmsg,"The operation cannot be carried out because there is no hardware support for stretching.");
  261.              break;
  262.         case DDERR_NOT4BITCOLOR:
  263.              strcpy(errmsg,"The DirectDrawSurface object is not using a 4-bit color palette and the requested operation requires a 4-bit color palette.");
  264.              break;
  265.         case DDERR_NOT4BITCOLORINDEX:
  266.              strcpy(errmsg,"The DirectDrawSurface object is not using a 4-bit color index palette and the requested operation requires a 4-bit color index palette.");
  267.              break;
  268.         case DDERR_NOT8BITCOLOR:
  269.              strcpy(errmsg,"The DirectDrawSurface object is not using an 8-bit color palette and the requested operation requires an 8-bit color palette.");
  270.              break;
  271.         case DDERR_NOTAOVERLAYSURFACE:
  272.              strcpy(errmsg,"An overlay component is called for a non-overlay surface.");
  273.              break;
  274.         case DDERR_NOTEXTUREHW:
  275.              strcpy(errmsg,"The operation cannot be carried out because no texture-mapping hardware is present or available.");
  276.              break;
  277.         case DDERR_NOTFLIPPABLE:
  278.              strcpy(errmsg,"An attempt has been made to flip a surface that cannot be flipped.");
  279.              break;
  280.         case DDERR_NOTFOUND:
  281.              strcpy(errmsg,"The requested item was not found.");
  282.              break;
  283.         case DDERR_NOTINITIALIZED:
  284.              strcpy(errmsg,"An attempt was made to call an interface method of a DirectDraw object created by CoCreateInstance before the object was initialized.");
  285.              break;
  286.         case DDERR_NOTLOCKED:
  287.              strcpy(errmsg,"An attempt is made to unlock a surface that was not locked.");
  288.              break;
  289.         case DDERR_NOTPAGELOCKED:
  290.              strcpy(errmsg,"An attempt is made to page unlock a surface with no outstanding page locks.");
  291.              break;
  292.         case DDERR_NOTPALETTIZED:
  293.              strcpy(errmsg,"The surface being used is not a palette-based surface.");
  294.              break;
  295.         case DDERR_NOVSYNCHW:
  296.              strcpy(errmsg,"The operation cannot be carried out because there is no hardware support for vertical blank synchronized operations.");
  297.              break;
  298.         case DDERR_NOZBUFFERHW:
  299.              strcpy(errmsg,"The operation to create a z-buffer in display memory or to perform a blit using a z-buffer cannot be carried out because there is no hardware support for z-buffers.");
  300.              break;
  301.         case DDERR_NOZOVERLAYHW:
  302.              strcpy(errmsg,"The overlay surfaces cannot be z-layered based on the z-order because the hardware does not support z-ordering of overlays.");
  303.              break;
  304.         case DDERR_OUTOFCAPS:
  305.              strcpy(errmsg,"The hardware needed for the requested operation has already been allocated.");
  306.              break;
  307.         case DDERR_OUTOFMEMORY:
  308.              strcpy(errmsg,"DirectDraw does not have enough memory to perform the operation.");
  309.              break;
  310.         case DDERR_OUTOFVIDEOMEMORY:
  311.              strcpy(errmsg,"DirectDraw does not have enough display memory to perform the operation.");
  312.              break;
  313.         case DDERR_OVERLAYCANTCLIP:
  314.              strcpy(errmsg,"The hardware does not support clipped overlays.");
  315.              break;
  316.         case DDERR_OVERLAYCOLORKEYONLYONEACTIVE:
  317.              strcpy(errmsg,"An attempt was made to have more than one color key active on an overlay.");
  318.              break;
  319.         case DDERR_OVERLAYNOTVISIBLE:
  320.              strcpy(errmsg,"The IDirectDrawSurface2::GetOverlayPosition method is called on a hidden overlay.");
  321.              break;
  322.         case DDERR_PALETTEBUSY:
  323.              strcpy(errmsg,"Access to this palette is refused because the palette is locked by another thread.");
  324.              break;
  325.         case DDERR_PRIMARYSURFACEALREADYEXISTS:
  326.              strcpy(errmsg,"This process has already created a primary surface.");
  327.              break;
  328.         case DDERR_REGIONTOOSMALL:
  329.              strcpy(errmsg,"The region passed to the IDirectDrawClipper::GetClipList method is too small.");
  330.              break;
  331.         case DDERR_SURFACEALREADYATTACHED:
  332.              strcpy(errmsg,"An attempt was made to attach a surface to another surface to which it is already attached.");
  333.              break;
  334.         case DDERR_SURFACEALREADYDEPENDENT:
  335.              strcpy(errmsg,"An attempt was made to make a surface a dependency of another surface to which it is already dependent.");
  336.              break;
  337.         case DDERR_SURFACEBUSY:
  338.              strcpy(errmsg,"Access to the surface is refused because the surface is locked by another thread.");
  339.              break;
  340.         case DDERR_SURFACEISOBSCURED:
  341.              strcpy(errmsg,"Access to the surface is refused because the surface is obscured.");
  342.              break;
  343.         case DDERR_SURFACELOST:
  344.              strcpy(errmsg,"Access to the surface is refused because the surface memory is gone. The DirectDrawSurface object representing this surface should have the IDirectDrawSurface2::Restore method called on it.");
  345.              break;
  346.         case DDERR_SURFACENOTATTACHED:
  347.              strcpy(errmsg,"The requested surface is not attached.");
  348.              break;
  349.         case DDERR_TOOBIGHEIGHT:
  350.              strcpy(errmsg,"The height requested by DirectDraw is too large.");
  351.              break;
  352.         case DDERR_TOOBIGSIZE:
  353.              strcpy(errmsg,"The size requested by DirectDraw is too large. However, the individual height and width are OK.");
  354.              break;
  355.         case DDERR_TOOBIGWIDTH:
  356.              strcpy(errmsg,"The width requested by DirectDraw is too large.");
  357.              break;
  358.         case DDERR_UNSUPPORTED:
  359.              strcpy(errmsg,"The operation is not supported.");
  360.              break;
  361.         case DDERR_UNSUPPORTEDFORMAT:
  362.              strcpy(errmsg,"The FourCC format requested is not supported by DirectDraw.");
  363.              break;
  364.         case DDERR_UNSUPPORTEDMASK:
  365.              strcpy(errmsg,"The bitmask in the pixel format requested is not supported by DirectDraw.");
  366.              break;
  367.         case DDERR_UNSUPPORTEDMODE:
  368.              strcpy(errmsg,"The display is currently in an unsupported mode.");
  369.              break;
  370.         case DDERR_VERTICALBLANKINPROGRESS:
  371.              strcpy(errmsg,"A vertical blank is in progress.");
  372.              break;
  373.         case DDERR_WASSTILLDRAWING:
  374.              strcpy(errmsg,"The previous blit operation that is transferring information to or from this surface is incomplete.");
  375.              break;
  376.         case DDERR_WRONGMODE:
  377.              strcpy(errmsg,"This surface cannot be restored because it was created in a different mode.");
  378.              break;
  379.         case DDERR_XALIGN:
  380.              strcpy(errmsg,"The provided rectangle was not horizontally aligned on a required boundary.");
  381.              break;
  382.         default:
  383.              sprintf(errmsg, "Unknown Error Code : %04X", hresult);
  384.              break;
  385.        }
  386.     sprintf(msgtext, "DDERR: %sn", errmsg);
  387.     WriteDebug( msgtext );
  388.     sprintf(msgtext, "%s FAILEDn", msg);
  389.     WriteDebug( msgtext );
  390.    }
  391. void DI_Error( HRESULT hresult, char *msg)
  392.    {
  393.     char msgtext[512];
  394.     char errmsg[512];
  395.     switch(hresult)
  396.        {
  397.         case DI_BUFFEROVERFLOW:
  398.              strcpy(errmsg, "The device buffer overflowed and some input was lost. This value is equal to the S_FALSE standard COM return value.");
  399.              break;
  400.         case DI_DOWNLOADSKIPPED: 
  401.              strcpy(errmsg, "The parameters of the effect were successfully updated, but the effect could not be downloaded because the associated device was not acquired in exclusive mode.");
  402.              break;
  403.         case DI_EFFECTRESTARTED:
  404.              strcpy(errmsg, "The effect was stopped, the parameters were updated, and the effect was restarted.");
  405.              break;
  406.         case DI_OK:
  407.              strcpy(errmsg, "The operation completed successfully. This value is equal to the S_OK standard COM return value.");
  408.              break;
  409.         case DI_POLLEDDEVICE:
  410.              strcpy(errmsg, "The device is a polled device. As a result, device buffering will not collect any data and event notifications will not be signaled until the IDirectInputDevice2::Poll method is called.");
  411.              break;
  412.         case DI_TRUNCATED:
  413.              strcpy(errmsg, "The parameters of the effect were successfully updated, but some of them were beyond the capabilities of the device and were truncated to the nearest supported value.");
  414.              break;
  415.         case DI_TRUNCATEDANDRESTARTED:
  416.              strcpy(errmsg, "Equal to DI_EFFECTRESTARTED | DI_TRUNCATED");
  417.              break;
  418.         case DIERR_ACQUIRED:
  419.              strcpy(errmsg, "The operation cannot be performed while the device is acquired.");
  420.              break;
  421.         case DIERR_ALREADYINITIALIZED:
  422.              strcpy(errmsg, "This object is already initialized");
  423.              break;
  424.         case DIERR_BADDRIVERVER:
  425.              strcpy(errmsg, "The object could not be created due to an incompatible driver version or mismatched or incomplete driver components.");
  426.              break;
  427.         case DIERR_BETADIRECTINPUTVERSION:
  428.              strcpy(errmsg, "The application was written for an unsupported prerelease version of DirectInput.");
  429.              break;
  430.         case DIERR_DEVICEFULL:
  431.              strcpy(errmsg, "The device is full.");
  432.              break;
  433.         case DIERR_DEVICENOTREG:
  434.              strcpy(errmsg, "The device or device instance is not registered with DirectInput. This value is equal to the REGDB_E_CLASSNOTREG standard COM return value.");
  435.              break;
  436.         case DIERR_EFFECTPLAYING:
  437.              strcpy(errmsg, "The parameters were updated in memory but were not downloaded to the device because the device does not support updating an effect while it is still playing.");
  438.              break;
  439.         case DIERR_HASEFFECTS:
  440.              strcpy(errmsg, "The device cannot be reinitialized because there are still effects attached to it");
  441.              break;
  442.         case DIERR_GENERIC:
  443.              strcpy(errmsg, "An undetermined error occurred inside the DirectInput subsystem. This value is equal to the E_FAIL standard COM return value.");
  444.              break;
  445.         case DIERR_HANDLEEXISTS:
  446.              strcpy(errmsg, "The device already has an event notification associated with it. This value is equal to the E_ACCESSDENIED standard COM return value.");
  447.              break;
  448.         case DIERR_INCOMPLETEEFFECT:
  449.              strcpy(errmsg, "The effect could not be downloaded because essential information is missing. For example, no axes have been associated with the effect, or no type-specific information has been supplied.");
  450.              break;
  451.         case DIERR_INPUTLOST:
  452.              strcpy(errmsg, "Access to the input device has been lost. It must be reacquired.");
  453.              break;
  454.         case DIERR_INVALIDPARAM:
  455.              strcpy(errmsg, "An invalid parameter was passed to the returning function, or the object was not in a state that permitted the function to be called. This value is equal to the E_INVALIDARG standard COM return value.");
  456.              break;
  457.         case DIERR_MOREDATA:
  458.              strcpy(errmsg, "Not all the requested information fitted into the buffer.");
  459.              break;
  460.         case DIERR_NOAGGREGATION:
  461.              strcpy(errmsg, "This object does not support aggregation.");
  462.              break;
  463.         case DIERR_NOINTERFACE:
  464.              strcpy(errmsg, "The specified interface is not supported by the object. This value is equal to the E_NOINTERFACE standard COM return value.");
  465.              break;
  466.         case DIERR_NOTACQUIRED:
  467.              strcpy(errmsg, "The operation cannot be performed unless the device is acquired.");
  468.              break;
  469.         case DIERR_NOTBUFFERED:
  470.              strcpy(errmsg, "The device is not buffered. Set the DIPROP_BUFFERSIZE property to enable buffering.");
  471.              break;
  472.         case DIERR_NOTDOWNLOADED:
  473.              strcpy(errmsg, "The effect is not downloaded.");
  474.              break;
  475.         case DIERR_NOTEXCLUSIVEACQUIRED:
  476.              strcpy(errmsg, "The operation cannot be performed unless the device is acquired in DISCL_EXCLUSIVE mode.");
  477.              break;
  478.         case DIERR_NOTFOUND:
  479.              strcpy(errmsg, "The requested object does not exist.");
  480.              break;
  481.         case DIERR_NOTINITIALIZED:
  482.              strcpy(errmsg, "This object has not been initialized.");
  483.              break;
  484.         case DIERR_OLDDIRECTINPUTVERSION:
  485.              strcpy(errmsg, "The application requires a newer version of DirectInput.");
  486.              break;
  487.         case DIERR_OUTOFMEMORY:
  488.              strcpy(errmsg, "The DirectInput subsystem couldn't allocate sufficient memory to complete the call. This value is equal to the E_OUTOFMEMORY standard COM return value.");
  489.              break;
  490.         case DIERR_UNSUPPORTED:
  491.              strcpy(errmsg, "The function called is not supported at this time. This value is equal to the E_NOTIMPL standard COM return value.");
  492.              break;
  493.         case E_PENDING:
  494.              strcpy(errmsg, "Data is not yet available.");
  495.              break;
  496.         default:
  497.              sprintf(errmsg, "Unknown Error Code : %04X", hresult);
  498.              break;
  499.        }
  500.     sprintf(msgtext, "DIERR: %sn", errmsg);
  501.     WriteDebug( msgtext );
  502.     sprintf(msgtext, "%s FAILEDn", msg);
  503.     WriteDebug( msgtext );
  504.    }