JwaErrorRep.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:7k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Windows Error Reporting API interface unit for Object Pascal                 }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  8. { The original file is: errorrep.h, released June 2000. The original Pascal    }
  9. { code is: ErrorRep.pas, released December 2000. The initial developer of the  }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  16. {                }
  17. { You may retrieve the latest version of this file at the Project JEDI home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaErrorRep;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "errorrep.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaWinBase, JwaWinType;
  52. type
  53.   tagEFaultRepRetVal = (
  54.     frrvOk,
  55.     frrvOkManifest,
  56.     frrvOkQueued,
  57.     frrvErr,
  58.     frrvErrNoDW,
  59.     frrvErrTimeout,
  60.     frrvLaunchDebugger,
  61.     frrvOkHeadless);
  62.   {$EXTERNALSYM tagEFaultRepRetVal}
  63.   EFaultRepRetVal = tagEFaultRepRetVal;
  64.   {$EXTERNALSYM EFaultRepRetVal}
  65. function ReportFault(pep: LPEXCEPTION_POINTERS; dwOpt: DWORD): EFaultRepRetVal; stdcall;
  66. {$EXTERNALSYM ReportFault}
  67. function AddERExcludedApplicationA(szApplication: LPCSTR): BOOL; stdcall;
  68. {$EXTERNALSYM AddERExcludedApplicationA}
  69. function AddERExcludedApplicationW(wszApplication: LPCWSTR): BOOL; stdcall;
  70. {$EXTERNALSYM AddERExcludedApplicationW}
  71. type
  72.   pfn_REPORTFAULT = function (pep: LPEXCEPTION_POINTERS; dwOpt: DWORD): EFaultRepRetVal; stdcall;
  73.   {$EXTERNALSYM pfn_REPORTFAULT}
  74.   pfn_ADDEREXCLUDEDAPPLICATIONA = function (szApplication: LPCSTR): BOOL; stdcall;
  75.   {$EXTERNALSYM pfn_ADDEREXCLUDEDAPPLICATIONA}
  76.   pfn_ADDEREXCLUDEDAPPLICATIONW = function (wszApplication: LPCWSTR): BOOL; stdcall;
  77.   {$EXTERNALSYM pfn_ADDEREXCLUDEDAPPLICATIONW}
  78. {$IFDEF UNICODE}
  79. function AddERExcludedApplication(wszApplication: LPCWSTR): BOOL; stdcall;
  80. {$EXTERNALSYM AddERExcludedApplication}
  81. type
  82.   pfn_ADDEREXCLUDEDAPPLICATION = pfn_ADDEREXCLUDEDAPPLICATIONW;
  83.   {$EXTERNALSYM pfn_ADDEREXCLUDEDAPPLICATION}
  84. {$ELSE}
  85. function AddERExcludedApplication(szApplication: LPCSTR): BOOL; stdcall;
  86. {$EXTERNALSYM AddERExcludedApplication}
  87. type
  88.   pfn_ADDEREXCLUDEDAPPLICATION = pfn_ADDEREXCLUDEDAPPLICATIONA;
  89.   {$EXTERNALSYM pfn_ADDEREXCLUDEDAPPLICATION}
  90. {$ENDIF}
  91. implementation
  92. const
  93.   faultrep_lib = 'faultrep.dll';
  94. {$IFDEF DYNAMIC_LINK}
  95. var
  96.   _ReportFault: Pointer;
  97. function ReportFault;
  98. begin
  99.   GetProcedureAddress(_ReportFault, faultrep_lib, 'ReportFault');
  100.   asm
  101.     mov esp, ebp
  102.     pop ebp
  103.     jmp [_ReportFault]
  104.   end;
  105. end;
  106. {$ELSE}
  107. function ReportFault; external faultrep_lib name 'ReportFault';
  108. {$ENDIF DYNAMIC_LINK}
  109. {$IFDEF DYNAMIC_LINK}
  110. var
  111.   _AddERExcludedApplicationA: Pointer;
  112. function AddERExcludedApplicationA;
  113. begin
  114.   GetProcedureAddress(_AddERExcludedApplicationA, faultrep_lib, 'AddERExcludedApplicationA');
  115.   asm
  116.     mov esp, ebp
  117.     pop ebp
  118.     jmp [_AddERExcludedApplicationA]
  119.   end;
  120. end;
  121. {$ELSE}
  122. function AddERExcludedApplicationA; external faultrep_lib name 'AddERExcludedApplicationA';
  123. {$ENDIF DYNAMIC_LINK}
  124. {$IFDEF DYNAMIC_LINK}
  125. var
  126.   _AddERExcludedApplicationW: Pointer;
  127. function AddERExcludedApplicationW;
  128. begin
  129.   GetProcedureAddress(_AddERExcludedApplicationW, faultrep_lib, 'AddERExcludedApplicationW');
  130.   asm
  131.     mov esp, ebp
  132.     pop ebp
  133.     jmp [_AddERExcludedApplicationW]
  134.   end;
  135. end;
  136. {$ELSE}
  137. function AddERExcludedApplicationW; external faultrep_lib name 'AddERExcludedApplicationW';
  138. {$ENDIF DYNAMIC_LINK}
  139. {$IFDEF UNICODE}
  140. {$IFDEF DYNAMIC_LINK}
  141. var
  142.   _AddERExcludedApplication: Pointer;
  143. function AddERExcludedApplication;
  144. begin
  145.   GetProcedureAddress(_AddERExcludedApplication, faultrep_lib, 'AddERExcludedApplicationW');
  146.   asm
  147.     mov esp, ebp
  148.     pop ebp
  149.     jmp [_AddERExcludedApplication]
  150.   end;
  151. end;
  152. {$ELSE}
  153. function AddERExcludedApplication; external faultrep_lib name 'AddERExcludedApplicationW';
  154. {$ENDIF DYNAMIC_LINK}
  155. {$ELSE}
  156. {$IFDEF DYNAMIC_LINK}
  157. var
  158.   _AddERExcludedApplication: Pointer;
  159. function AddERExcludedApplication;
  160. begin
  161.   GetProcedureAddress(_AddERExcludedApplication, faultrep_lib, 'AddERExcludedApplicationA');
  162.   asm
  163.     mov esp, ebp
  164.     pop ebp
  165.     jmp [_AddERExcludedApplication]
  166.   end;
  167. end;
  168. {$ELSE}
  169. function AddERExcludedApplication; external faultrep_lib name 'AddERExcludedApplicationA';
  170. {$ENDIF DYNAMIC_LINK}
  171. {$ENDIF}
  172. end.