unit uMain; interface uses PythonEngine; function PyInit_DemoModule: PPyObject; cdecl; implementation Uses System.Math, WrapDelphi; var gEngine : TPythonEngine; gModule : TPythonModule; function IsPrime(x: Integer): Boolean; // Naive implementation. It is just a demo begin if (x <= 1) then Exit(False); var q := Floor(Sqrt(x)); for var i := 2 to q do if (x mod i = 0) then Exit(False); Exit(True); end; function delphi_is_prime(self, args : PPyObject) : PPyObject; cdecl; var N: Integer; begin with gEngine do if PyArg_ParseTuple( args, 'i', @N ) <> 0 then begin if IsPrime(N) then Result := PPyObject(Py_True) else Result := PPyObject(Py_False); Py_INCREF(Result); end else Result := nil; end; function PyInit_DemoModule: PPyObject; begin try gEngine := TPythonEngine.Create(nil); gEngine.AutoFinalize := False; gEngine.UseLastKnownVersion := True; gModule := TPythonModule.Create(nil); gModule.Engine := gEngine; gModule.ModuleName := 'DemoModule'; gModule.AddMethod('is_prime', delphi_is_prime, 'is_prime(n) -> bool' ); gEngine.LoadDllInExtensionModule; except end; Result := gModule.Module; end; initialization finalization gEngine.Free; gModule.Free; end.