基于COM技术的项目。 我在Delphi XE4 64Bit上记录了JCL的错误(SKGeneral64是COM Dll):
ERR (ThreadID=14C8 14.02.2014 16:43:14:274) - Exception class: _TExitDllException
Exception address: 000000000536DBAE
Stack list, generated 14.02.2014 16:43:14
[000000000536DBAE] System.ExitDll + $3E
[000000000536DCF4] System.@Halt0 + $54
[000000000536D5E3] System.@StartLib + $123
[0000000005375FA2] SysInit.@InitLib + $92
[00000000056D7938] SKGeneral64.SKGeneral64 + $38
[000000007777C76C] Unknown function at RtlUserThreadStart + $26C
[000000007777C42F] Unknown function at LdrInitializeThunk + $10F
[000000007777C32E] LdrInitializeThunk + $E
----------------------------------------------------------------------------------------------------
System : Windows 7 Professional, Version: 6.1, Build: 1DB1, "Service Pack 1"
Processor: Intel, Intel(R) Xeon(R) CPU X5670 @ 2.93GHz, 2960 MHz MMX
----------------------------------------------------------------------------------------------------
Module: C:\PROGRA~2\SKBKON~1\Active\Bin\SKGENE~2.DLL Modified: 14.02.2014 16:42:37
Version: 1.0.0.0 Description:
是什么原因?它可能是内存泄漏和内存碎片的原因吗?
答案 0 :(得分:2)
进行了一些挖掘后,似乎预期会出现此异常,并且是线程在线程终止时返回其退出代码的方式。
这是怎么回事。拨打System.ExitDll
致电:
procedure ExitDll(Context: PInitContext);
var
ResultExitCode: Integer;
begin
Context^ := Context.OuterContext^;
ResultExitCode := ExitCode;
ExitCode := 0;
//raise _TExitDllException.Create(ResultExitCode);
_RaiseExcept(_TExitDllException.Create(ResultExitCode));
end;
这就是提出异常的原因。该异常在_HandleExitDllException
:
function _HandleExitDllException: Integer;
var
ExceptionObject: TObject;
begin
Result := -1;
ExceptionObject := ExceptObject;
if ExceptionObject is _TExitDllException then
Result := _TExitDllException(ExceptionObject).ExitCode
else
_UnhandledException;
_DoneExcept;
end;
此代码从异常中读取退出代码并将该值返回给调用者。您无法在RTL中看到调用_HandleExitDllException
的任何代码,大概是因为它是由编译器/链接器神奇地链接的。
基本上,这是错误报告软件的误报。此异常是正常程序执行的一部分。没有什么可担心的。除了您的错误报告代码似乎有缺陷。