@@ -1170,6 +1170,7 @@ TDynamicDll = class(TComponent)
11701170 FOnBeforeLoad : TNotifyEvent;
11711171 FOnAfterLoad : TNotifyEvent;
11721172 FOnBeforeUnload : TNotifyEvent;
1173+ FInExtensionModule : Boolean;
11731174
11741175 function Import (const funcname: AnsiString; canFail : Boolean = True): Pointer;
11751176 procedure Loaded ; override;
@@ -1189,6 +1190,7 @@ TDynamicDll = class(TComponent)
11891190 procedure OpenDll (const aDllName : string);
11901191 function IsHandleValid : Boolean;
11911192 procedure LoadDll ;
1193+ procedure LoadDllInExtensionModule ;
11921194 procedure UnloadDll ;
11931195 procedure Quit ;
11941196
@@ -2978,7 +2980,7 @@ function TDynamicDll.GetDllPath : string;
29782980begin
29792981 Result := DllPath;
29802982
2981- if DLLPath = ' ' then begin
2983+ if ( DLLPath = ' ' ) and not FInExtensionModule then begin
29822984 { $IFDEF MSWINDOWS}
29832985 IsPythonVersionRegistered(RegVersion, Result, AllUserInstall);
29842986 { $ENDIF}
@@ -3086,6 +3088,12 @@ procedure TDynamicDll.LoadDll;
30863088 OpenDll( DllName );
30873089end ;
30883090
3091+ procedure TDynamicDll.LoadDllInExtensionModule ;
3092+ begin
3093+ FInExtensionModule := True;
3094+ LoadDLL;
3095+ end ;
3096+
30893097procedure TDynamicDll.UnloadDll ;
30903098begin
30913099 if IsHandleValid then begin
@@ -4223,26 +4231,34 @@ procedure TPythonEngine.Initialize;
42234231 raise Exception.Create(' There is already one instance of TPythonEngine running' );
42244232
42254233 gPythonEngine := Self;
4226- CheckRegistry;
4227- if Assigned(Py_SetProgramName) and (Length(FProgramName) > 0 ) then
4228- Py_SetProgramName(PWCharT(FProgramName));
4229- AssignPyFlags;
4230- if Length(FPythonHome) > 0 then
4231- Py_SetPythonHome(PWCharT(FPythonHome));
4232- Py_Initialize;
4233- if Assigned(Py_IsInitialized) then
4234- FInitialized := Py_IsInitialized() <> 0
4235- else
4236- FInitialized := True;
4234+
42374235 FIORedirected := False;
4238- InitSysPath;
4239- SetProgramArgs;
4236+ if FInExtensionModule then
4237+ FInitialized := True
4238+ else
4239+ begin
4240+ CheckRegistry;
4241+ if Assigned(Py_SetProgramName) and (Length(FProgramName) > 0 ) then
4242+ Py_SetProgramName(PWCharT(FProgramName));
4243+ AssignPyFlags;
4244+ if Length(FPythonHome) > 0 then
4245+ Py_SetPythonHome(PWCharT(FPythonHome));
4246+ Py_Initialize;
4247+ if Assigned(Py_IsInitialized) then
4248+ FInitialized := Py_IsInitialized() <> 0
4249+ else
4250+ FInitialized := True;
4251+ InitSysPath;
4252+ SetProgramArgs;
4253+ if InitThreads and Assigned(PyEval_InitThreads) then
4254+ PyEval_InitThreads;
4255+ if RedirectIO and Assigned(FIO) then
4256+ DoRedirectIO;
4257+ end ;
4258+
42404259 GetTimeStructType;
42414260 GetDateTimeTypes;
4242- if InitThreads and Assigned(PyEval_InitThreads) then
4243- PyEval_InitThreads;
4244- if RedirectIO and Assigned(FIO) then
4245- DoRedirectIO;
4261+
42464262 for i := 0 to ClientCount - 1 do
42474263 with Clients[i] do
42484264 if not Initialized then
0 commit comments