with win32; use win32;
with win32.objbase; use win32.objbase;
package DxErr is
function DXGetErrorStringA(hr:HRESULT) return LPCCH with Import,Convention=>stdcall,external_name=>"DXGetErrorStringA";
function DXGetErrorString(hr:HRESULT) return LPCCH with Import,Convention=>stdcall,external_name=>"DXGetErrorStringA";
function DXGetErrorStringW(hr:HRESULT) return LPCWCH with Import,Convention=>stdcall,external_name=>"DXGetErrorStringW";
function DXGetErrorDescriptionA(hr:HRESULT) return LPCCH with Import,Convention=>stdcall,external_name=>"DXGetErrorDescriptionA";
function DXGetErrorDescription(hr:HRESULT) return LPCCH with Import,Convention=>stdcall,external_name=>"DXGetErrorDescriptionA";
function DXGetErrorDescriptionW(hr:HRESULT) return LPWCH with Import,Convention=>stdcall,external_name=>"DXGetErrorDescriptionW";
function DXTraceA(strFile:LPCCH;dwLine:DWORD;hr:HRESULT;strMsg:LPCCH;bPopMsgBox:BOOL) return HRESULT with Import,Convention=>stdcall,external_name=>"DXTraceA";
function DXTrace(strFile:LPCCH;dwLine:DWORD;hr:HRESULT;strMsg:LPCCH;bPopMsgBox:BOOL) return HRESULT with Import,Convention=>stdcall,external_name=>"DXTraceA";
function DXTraceW(strFile:LPCCH;dwLine:DWORD;hr:HRESULT;strMsg:LPCWCH;bPopMsgBox:BOOL) return HRESULT with Import,Convention=>stdcall,external_name=>"DXTraceW";
--
-- 在DEBUG模式下的辅助宏函数,这里借用C导入方式
--
function DXTRACE_MSG(str:String) return HRESULT with import,convention=>stdcall,external_name=>"DXTRACE_MSGX";
function DXTRACE_ERR(str:String;hr:HRESULT) return HRESULT with import,convention=>stdcall,external_name=>"DXTRACE_ERRX";
function DXTRACE_ERR_MSGBOX(str:String;hr:HRESULT) return HRESULT with import,convention=>stdcall,external_name=>"DXTRACE_ERR_MSGBOXX";
pragma Linker_Options("DxErrAdaC.c");
end DxErr;
文件2:DxErrAdaC.c
// File:DxErrAdaC.c
// DxErr for Ada C,for Macro functions
#include <objbase.h>
extern HRESULT WINAPI DXTraceA(const char* strFile,DWORD dwLine,HRESULT hr,const char* strMsg,BOOL bPopMsgBox);
#define DXTRACE_MSG(str) DXTraceA( __FILE__, (DWORD)__LINE__, 0, str, FALSE)
#define DXTRACE_ERR(str,hr) DXTraceA( __FILE__, (DWORD)__LINE__, hr, str, FALSE)
#define DXTRACE_ERR_MSGBOX(str,hr) DXTraceA( __FILE__, (DWORD)__LINE__, hr, str, TRUE)
HRESULT WINAPI DXTRACE_MSGX(const char* str){DXTRACE_MSG(str);}
HRESULT WINAPI DXTRACE_ERRX(const char* str,HRESULT hr){DXTRACE_ERR(str,hr);}
HRESULT WINAPI DXTRACE_ERR_MSGBOXX(const char* str,HRESULT hr){DXTRACE_ERR_MSGBOX(str,hr);}