Много раз наступал не эту багу и увидел эту же проблему тут:
http://www.progdigy.com/forums/viewtopic.php?t=5073
program EmbeddedTest;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
Uib in 'UIB\Uib.pas',
uiblib in 'UIB\uiblib.pas',
uibase in 'UIB\uibase.pas',
uibconst in 'UIB\uibconst.pas',
uiberror in 'UIB\uiberror.pas',
uibkeywords in 'UIB\uibkeywords.pas',
uibsqlparser in 'UIB\uibsqlparser.pas',
uibmetadata in 'UIB\uibmetadata.pas',
uibavl in 'UIB\uibavl.pas';
procedure RunTest(UseEmbedded: Boolean);
var
I: Integer;
DBase: TUIBDatabase;
begin
for I := 0 to 100 do
begin
DBase := TUIBDatabase.Create;
try
if UseEmbedded then
DBase.LibraryName := ExtractFilePath(ParamStr(0)) + 'EmbeddedFirebird\fbembed.dll'
else
DBase.LibraryName := ExtractFilePath(ParamStr(0)) + 'RemoteFirebird\fbclient.dll';
DBase.DatabaseName := ExtractFilePath(ParamStr(0)) + 'Data.fdb';
DBase.UserName := 'SYSDBA';
DBase.PassWord := 'masterkey';
DBase.Connected := True;
DBase.Connected := False;
DBase.LibraryName := '';
finally
DBase.Free;
end
end;
end;
begin
try
Write('fbclient.dll... ');
RunTest(False);
Writeln('Done');
Write('fbembed.dll... ');
RunTest(True); // падает тут
Writeln('Done');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Падает с access violation в разных местах (обычно в MSVCR80._endthreadex), причём независимо от того, вызывается ли fb_shutdown перед FreeLibrary или нет.
Более того, тест может пару-тройку раз отработать без ошибок, т.е. бага какая-то нетривиальная.
Win7 x64, Firebird 2.5.1.26351 (win32).
Исходники теста тут:
http://rghost.ru/38633817 (embedded Firebird included)