Стартовый пул
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
unit GeckoInit;
|
||||
|
||||
interface
|
||||
|
||||
procedure GeckoComponentsStartup(XPComPath: string = '');
|
||||
procedure GeckoComponentsShutdown;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
nsXPCOM, nsInit, nsTypes, nsErrorUtils, nsError,
|
||||
nsXPCOMGlue, nsXRE {$IFDEF MSWINDOWS}, Windows {$ENDIF};
|
||||
|
||||
var
|
||||
sInitCount: Integer = 0;
|
||||
|
||||
procedure GeckoComponentsStartup(XPComPath: string = '');
|
||||
const
|
||||
NS_DIRECTORY_SERVICE_CID: TGUID = '{f00152d0-b40b-11d3-8c9c-000064657374}';
|
||||
var
|
||||
rv: nsresult;
|
||||
errorStr: AnsiString;
|
||||
ServiceManager: nsIServiceManager;
|
||||
DirectoryService: nsIDirectoryService;
|
||||
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;
|
||||
|
||||
//Register the service via Service Manager.
|
||||
if not Assigned(GeckoEngineDirectoryService) then
|
||||
GeckoEngineDirectoryService:=IDirectoryServiceProvider.Create;
|
||||
NS_GetServiceManager(ServiceManager);
|
||||
ServiceManager.GetService(NS_DIRECTORY_SERVICE_CID, DirectoryService,DirectoryService);
|
||||
{$IFDEF LCLGTK2 AND defined(cpux86_64)}
|
||||
//No register meanwhile the DirectoryService bug in Linux64 is not solved.
|
||||
{$ELSE}
|
||||
DirectoryService.RegisterProvider(GeckoEngineDirectoryService);
|
||||
{$ENDIF}
|
||||
|
||||
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.
|
||||
|
Reference in New Issue
Block a user