lazarus-ccr/components/geckoport/Components/GeckoInit.pas

59 lines
1.0 KiB
ObjectPascal

unit GeckoInit;
interface
procedure GeckoComponentsStartup(XPComPath: string = '');
procedure GeckoComponentsShutdown;
implementation
uses
nsXPCOM, nsInit, nsGeckoStrings, nsTypes, nsConsts, nsErrorUtils, nsError,
nsXPCOMGlue, nsXRE {$IFDEF MSWINDOWS}, Windows {$ENDIF};
var
sInitCount: Integer = 0;
procedure GeckoComponentsStartup(XPComPath: string = '');
var
rv: nsresult;
errorStr: AnsiString;
begin
if sInitCount>0 then
begin
Inc(sInitCount);
Exit;
end;
rv := XRE_Startup('1.9', True, '2.0', False, XPComPath);
if NS_FAILED(rv) then
begin
errorStr := NS_GetErrorStringBundleKey(rv);
XPCOMGlueShutdown;
raise EGeckoError.Create(string(errorStr));
end;
Inc(sInitCount);
end;
procedure GeckoComponentsShutdown();
begin
if sInitCount = 0 then
begin
raise EGeckoError.Create(
'ERROR: Too many calls for GeckoComponentsShutdown then GeckoComponentsStartup');
end;
Dec(sInitCount);
if sInitCount = 0 then
begin
XRE_Shutdown();
end;
end;
end.