G940LEDControl/DirectX/DXErr9.pas

248 lines
11 KiB
ObjectPascal

{******************************************************************************}
{* *}
{* Copyright (C) Microsoft Corporation. All Rights Reserved. *}
{* *}
{* File: dxerr9.h *}
{* Content: DirectX Error Library Include File *}
{* *}
{* DirectX 9.0 Delphi / FreePascal adaptation by Alexey Barkovoy *}
{* E-Mail: directx@clootie.ru *}
{* *}
{* Latest version can be downloaded from: *}
{* http://clootie.ru *}
{* http://sourceforge.net/projects/delphi-dx9sdk *}
{* *}
{*----------------------------------------------------------------------------*}
{* $Id: DXErr9.pas,v 1.8 2006/01/15 21:09:29 clootie Exp $ }
{******************************************************************************}
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
{$I DirectX.inc}
unit DXErr9;
interface
{$HPPEMIT '#include "dxerr9.h"'}
uses
Windows;
(*==========================================================================;
*
*
* File: dxerr9.h
* Content: DirectX Error Library Include File
*
****************************************************************************)
const
//////////// DLL export definitions ///////////////////////////////////////
dxerr9dll = 'dxerr9ab.dll';
type
TDXGetError9A = function (hr: HRESULT): PAnsiChar; stdcall;
TDXGetError9W = function (hr: HRESULT): PWideChar; stdcall;
TDXGetError9 = {$IFDEF UNICODE}TDXGetError9W{$ELSE}TDXGetError9A{$ENDIF};
function Dummy_DXGetError9A(hr: HRESULT): PAnsiChar; stdcall;
function Dummy_DXGetError9W(hr: HRESULT): PWideChar; stdcall;
//
// DXGetErrorString9
//
// Desc: Converts a DirectX 9 or earlier HRESULT to a string
//
// Args: HRESULT hr Can be any error code from
// D3D9 D3DX9 D3D8 D3DX8 DDRAW DPLAY8 DMUSIC DSOUND DINPUT DSHOW
//
// Return: Converted string
//
var
DXGetErrorString9A: TDXGetError9A = Dummy_DXGetError9A;
DXGetErrorString9W: TDXGetError9W = Dummy_DXGetError9W;
DXGetErrorString9: TDXGetError9 = {$IFDEF UNICODE}Dummy_DXGetError9W{$ELSE}Dummy_DXGetError9A{$ENDIF};
//
// DXGetErrorDescription9
//
// Desc: Returns a string description of a DirectX 9 or earlier HRESULT
//
// Args: HRESULT hr Can be any error code from
// D3D9 D3DX9 D3D8 D3DX8 DDRAW DPLAY8 DMUSIC DSOUND DINPUT DSHOW
//
// Return: String description
//
var
DXGetErrorDescription9A: TDXGetError9A = Dummy_DXGetError9A;
DXGetErrorDescription9W: TDXGetError9W = Dummy_DXGetError9W;
DXGetErrorDescription9: TDXGetError9 = {$IFDEF UNICODE}Dummy_DXGetError9W{$ELSE}Dummy_DXGetError9A{$ENDIF};
//
// DXTrace
//
// Desc: Outputs a formatted error message to the debug stream
//
// Args: CHAR* strFile The current file, typically passed in using the
// __FILE__ macro.
// DWORD dwLine The current line number, typically passed in using the
// __LINE__ macro.
// HRESULT hr An HRESULT that will be traced to the debug stream.
// CHAR* strMsg A string that will be traced to the debug stream (may be NULL)
// BOOL bPopMsgBox If TRUE, then a message box will popup also containing the passed info.
//
// Return: The hr that was passed in.
//
type
TDXTraceA = function (strFile: PAnsiChar; dwLine: DWORD; hr: HRESULT; strMsg: PAnsiChar; bPopMsgBox: BOOL{$IFDEF SUPPORTS_DEFAULTPARAMS} = FALSE{$ENDIF}): HRESULT; stdcall;
TDXTraceW = function (strFile: PAnsiChar; dwLine: DWORD; hr: HRESULT; strMsg: PWideChar; bPopMsgBox: BOOL{$IFDEF SUPPORTS_DEFAULTPARAMS} = FALSE{$ENDIF}): HRESULT; stdcall;
TDXTrace = {$IFDEF UNICODE}TDXTraceW{$ELSE}TDXTraceA{$ENDIF};
function Dummy_DXTraceA(strFile: PAnsiChar; dwLine: DWORD; hr: HRESULT; strMsg: PAnsiChar; bPopMsgBox: BOOL{$IFDEF SUPPORTS_DEFAULTPARAMS} = FALSE{$ENDIF}): HRESULT; stdcall;
function Dummy_DXTraceW(strFile: PAnsiChar; dwLine: DWORD; hr: HRESULT; strMsg: PWideChar; bPopMsgBox: BOOL{$IFDEF SUPPORTS_DEFAULTPARAMS} = FALSE{$ENDIF}): HRESULT; stdcall;
var
DXTraceA: TDXTraceA = Dummy_DXTraceA;
DXTraceW: TDXTraceW = Dummy_DXTraceW;
DXTrace: TDXTrace = {$IFDEF UNICODE}Dummy_DXTraceW{$ELSE}Dummy_DXTraceA{$ENDIF};
//
// Helper macros
//
function DXTRACE_MSG(str: PChar; FileName: PChar{$IFDEF SUPPORTS_DEFAULTPARAMS} = nil{$ENDIF}; Line: DWORD{$IFDEF SUPPORTS_DEFAULTPARAMS} = $FFFFFFFF{$ENDIF}): HRESULT;{$IFDEF SUPPORTS_INLINE} inline;{$ENDIF}
{$EXTERNALSYM DXTRACE_MSG}
function DXTRACE_ERR(str: PChar; hr: HRESULT; FileName: PChar{$IFDEF SUPPORTS_DEFAULTPARAMS} = nil{$ENDIF}; Line: DWORD{$IFDEF SUPPORTS_DEFAULTPARAMS} = $FFFFFFFF{$ENDIF}): HRESULT;{$IFDEF SUPPORTS_INLINE} inline;{$ENDIF}
{$EXTERNALSYM DXTRACE_ERR}
function DXTRACE_ERR_MSGBOX(str: PChar; hr: HRESULT; FileName: PChar{$IFDEF SUPPORTS_DEFAULTPARAMS} = nil{$ENDIF}; Line: DWORD{$IFDEF SUPPORTS_DEFAULTPARAMS} = $FFFFFFFF{$ENDIF}): HRESULT;{$IFDEF SUPPORTS_INLINE} inline;{$ENDIF}
{$EXTERNALSYM DXTRACE_ERR_MSGBOX}
implementation
uses SysUtils;
resourcestring
SDXGetErrorString9 = dxerr9dll + ' library is not found. Description for 0x%x is not available.';
var
TempStringA: AnsiString;
TempStringW: WideString;
function Dummy_DXGetError9A(hr: HRESULT): PAnsiChar; stdcall;
begin
TempStringA:= Format(SDXGetErrorString9, [hr]);
Result:= PAnsiChar(TempStringA);
end;
function Dummy_DXGetError9W(hr: HRESULT): PWideChar; stdcall;
begin
{$IFNDEF COMPILER6_UP}
{$DEFINE D5_OR_LOWER}
{$ENDIF}
{$IFDEF D5_OR_LOWER}
TempStringW:= Format(SDXGetErrorString9, [hr]);
{$ELSE}
TempStringW:= WideFormat(SDXGetErrorString9, [hr]);
{$ENDIF}
Result:= PWideChar(TempStringW);
end;
function Dummy_DXTraceA(strFile: PAnsiChar; dwLine: DWORD; hr: HRESULT; strMsg: PAnsiChar; bPopMsgBox: BOOL{$IFDEF SUPPORTS_DEFAULTPARAMS} = FALSE{$ENDIF}): HRESULT; stdcall;
begin
Result:= hr;
end;
function Dummy_DXTraceW(strFile: PAnsiChar; dwLine: DWORD; hr: HRESULT; strMsg: PWideChar; bPopMsgBox: BOOL{$IFDEF SUPPORTS_DEFAULTPARAMS} = FALSE{$ENDIF}): HRESULT; stdcall;
begin
Result:= hr;
end;
{$IFNDEF DEBUG}
function DXTRACE_MSG(str: PChar; FileName: PChar{$IFDEF SUPPORTS_DEFAULTPARAMS} = nil{$ENDIF}; Line: DWORD{$IFDEF SUPPORTS_DEFAULTPARAMS} = $FFFFFFFF{$ENDIF}): HRESULT;
begin Result:= 0; end;
function DXTRACE_ERR(str: PChar; hr: HRESULT; FileName: PChar{$IFDEF SUPPORTS_DEFAULTPARAMS} = nil{$ENDIF}; Line: DWORD{$IFDEF SUPPORTS_DEFAULTPARAMS} = $FFFFFFFF{$ENDIF}): HRESULT;
begin Result:= hr; end;
function DXTRACE_ERR_MSGBOX(str: PChar; hr: HRESULT; FileName: PChar{$IFDEF SUPPORTS_DEFAULTPARAMS} = nil{$ENDIF}; Line: DWORD{$IFDEF SUPPORTS_DEFAULTPARAMS} = $FFFFFFFF{$ENDIF}): HRESULT;
begin Result:= hr; end;
{$ELSE}
function DXTRACE_MSG(str: PChar; FileName: PChar{$IFDEF SUPPORTS_DEFAULTPARAMS} = nil{$ENDIF}; Line: DWORD{$IFDEF SUPPORTS_DEFAULTPARAMS} = $FFFFFFFF{$ENDIF}): HRESULT;
begin
Result:= DXTrace(FileName, Line, 0, str, False);
end;
function DXTRACE_ERR(str: PChar; hr: HRESULT; FileName: PChar{$IFDEF SUPPORTS_DEFAULTPARAMS} = nil{$ENDIF}; Line: DWORD{$IFDEF SUPPORTS_DEFAULTPARAMS} = $FFFFFFFF{$ENDIF}): HRESULT;
begin
Result:= DXTrace(FileName, Line, hr, str, False);
end;
function DXTRACE_ERR_MSGBOX(str: PChar; hr: HRESULT; FileName: PChar{$IFDEF SUPPORTS_DEFAULTPARAMS} = nil{$ENDIF}; Line: DWORD{$IFDEF SUPPORTS_DEFAULTPARAMS} = $FFFFFFFF{$ENDIF}): HRESULT;
begin
Result:= DXTrace(FileName, Line, hr, str, True);
end;
{$ENDIF}
var
dxerr9DllInstance: THandle = 0;
temp: Pointer;
initialization
dxerr9DllInstance := LoadLibrary(dxerr9dll);
if (dxerr9DllInstance <> 0) then
begin
temp:= GetProcAddress(dxerr9DllInstance, 'DXGetErrorString9A'); if (temp<>nil) then DXGetErrorString9A:= temp;
temp:= GetProcAddress(dxerr9DllInstance, 'DXGetErrorString9W'); if (temp<>nil) then DXGetErrorString9W:= temp;
temp:= GetProcAddress(dxerr9DllInstance, 'DXGetErrorDescription9A'); if (temp<>nil) then DXGetErrorDescription9A:= temp;
temp:= GetProcAddress(dxerr9DllInstance, 'DXGetErrorDescription9W'); if (temp<>nil) then DXGetErrorDescription9W:= temp;
temp:= GetProcAddress(dxerr9DllInstance, 'DXTraceA'); if (temp<>nil) then DXTraceA:= temp;
temp:= GetProcAddress(dxerr9DllInstance, 'DXTraceW'); if (temp<>nil) then DXTraceW:= temp;
{$IFDEF UNICODE}
DXGetErrorString9 := DXGetErrorString9W;
DXGetErrorDescription9 := DXGetErrorDescription9W;
DXTrace := DXTraceW;
{$ELSE}
DXGetErrorString9 := DXGetErrorString9A;
DXGetErrorDescription9 := DXGetErrorDescription9A;
DXTrace := DXTraceA;
{$ENDIF}
end;
finalization
if (dxerr9DllInstance <> 0) then
begin
FreeLibrary(dxerr9DllInstance);
dxerr9DllInstance := 0;
end;
end.