| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 5edcded commit 872fbb8
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -130,5 +130,17 @@ public void SetPythonHomeTwice() | |||
| 130 | 130 | Assert.AreEqual(pythonHome, PythonEngine.PythonHome); | |
| 131 | 131 | PythonEngine.Shutdown(); | |
| 132 | 132 | } | |
| 133 | + | ||
| 134 | + [Test] | ||
| 135 | + public void SetProgramName() | ||
| 136 | + { | ||
| 137 | + var programName = "FooBar"; | ||
| 138 | + | ||
| 139 | + PythonEngine.ProgramName = programName; | ||
| 140 | + PythonEngine.Initialize(); | ||
| 141 | + | ||
| 142 | + Assert.AreEqual(programName, PythonEngine.ProgramName); | ||
| 143 | + PythonEngine.Shutdown(); | ||
| 144 | + } | ||
| 133 | 145 | } | |
| 134 | 146 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -15,6 +15,8 @@ public class PythonEngine : IDisposable | |||
| 15 | 15 | private static DelegateManager delegateManager; | |
| 16 | 16 | private static bool initialized; | |
| 17 | 17 | private static IntPtr _pythonHome = IntPtr.Zero; | |
| 18 | + private static IntPtr _programName = IntPtr.Zero; | ||
| 19 | + private static IntPtr _pythonPath = IntPtr.Zero; | ||
| 18 | 20 | ||
| 19 | 21 | public PythonEngine() | |
| 20 | 22 | { | |
@@ -65,7 +67,17 @@ public static string ProgramName | |||
| 65 | 67 | ||
| 66 | 68 | return result ?? ""; | |
| 67 | 69 | } | |
| 68 | - set { Runtime.Py_SetProgramName(value); } | ||
| 70 | + set | ||
| 71 | + { | ||
| 72 | + if (_programName != IntPtr.Zero) | ||
| 73 | + { | ||
| 74 | + Marshal.FreeHGlobal(_programName); | ||
| 75 | + } | ||
| 76 | + _programName = Runtime.IsPython3 | ||
| 77 | + ? UcsMarshaler.GetInstance("").MarshalManagedToNative(value) | ||
| 78 | + : Marshal.StringToHGlobalAnsi(value); | ||
| 79 | + Runtime.Py_SetProgramName(_programName); | ||
| 80 | + } | ||
| 69 | 81 | } | |
| 70 | 82 | ||
| 71 | 83 | public static string PythonHome | |
@@ -103,7 +115,17 @@ public static string PythonPath | |||
| 103 | 115 | ||
| 104 | 116 | return result ?? ""; | |
| 105 | 117 | } | |
| 106 | - set { Runtime.Py_SetPath(value); } | ||
| 118 | + set | ||
| 119 | + { | ||
| 120 | + if (_pythonPath != IntPtr.Zero) | ||
| 121 | + { | ||
| 122 | + Marshal.FreeHGlobal(_pythonPath); | ||
| 123 | + } | ||
| 124 | + _pythonPath = Runtime.IsPython3 | ||
| 125 | + ? UcsMarshaler.GetInstance("").MarshalManagedToNative(value) | ||
| 126 | + : Marshal.StringToHGlobalAnsi(value); | ||
| 127 | + Runtime.Py_SetPath(_pythonPath); | ||
| 128 | + } | ||
| 107 | 129 | } | |
| 108 | 130 | ||
| 109 | 131 | public static string Version | |
@@ -297,6 +319,11 @@ public static void Shutdown() | |||
| 297 | 319 | { | |
| 298 | 320 | Marshal.FreeHGlobal(_pythonHome); | |
| 299 | 321 | _pythonHome = IntPtr.Zero; | |
| 322 | + Marshal.FreeHGlobal(_programName); | ||
| 323 | + _programName = IntPtr.Zero; | ||
| 324 | + Marshal.FreeHGlobal(_pythonPath); | ||
| 325 | + _pythonPath = IntPtr.Zero; | ||
| 326 | + | ||
| 300 | 327 | Runtime.Shutdown(); | |
| 301 | 328 | initialized = false; | |
| 302 | 329 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -686,9 +686,7 @@ public static extern int Py_Main( | |||
| 686 | 686 | internal static extern IntPtr Py_GetProgramName(); | |
| 687 | 687 | ||
| 688 | 688 | [DllImport(PythonDll)] | |
| 689 | - internal static extern void Py_SetProgramName( | ||
| 690 | - [MarshalAs(UnmanagedType.LPWStr)] string name | ||
| 691 | - ); | ||
| 689 | + internal static extern void Py_SetProgramName(IntPtr name); | ||
| 692 | 690 | ||
| 693 | 691 | [DllImport(PythonDll)] | |
| 694 | 692 | internal static extern IntPtr Py_GetPythonHome(); | |
@@ -700,15 +698,13 @@ internal static extern void Py_SetProgramName( | |||
| 700 | 698 | internal static extern IntPtr Py_GetPath(); | |
| 701 | 699 | ||
| 702 | 700 | [DllImport(PythonDll)] | |
| 703 | - internal static extern void Py_SetPath( | ||
| 704 | - [MarshalAs(UnmanagedType.LPWStr)] string home | ||
| 705 | - ); | ||
| 701 | + internal static extern void Py_SetPath(IntPtr home); | ||
| 706 | 702 | #elif PYTHON2 | |
| 707 | 703 | [DllImport(PythonDll)] | |
| 708 | 704 | internal static extern IntPtr Py_GetProgramName(); | |
| 709 | 705 | ||
| 710 | 706 | [DllImport(PythonDll)] | |
| 711 | - internal static extern void Py_SetProgramName(string name); | ||
| 707 | + internal static extern void Py_SetProgramName(IntPtr name); | ||
| 712 | 708 | ||
| 713 | 709 | [DllImport(PythonDll)] | |
| 714 | 710 | internal static extern IntPtr Py_GetPythonHome(); | |
@@ -720,7 +716,7 @@ internal static extern void Py_SetPath( | |||
| 720 | 716 | internal static extern IntPtr Py_GetPath(); | |
| 721 | 717 | ||
| 722 | 718 | [DllImport(PythonDll)] | |
| 723 | - internal static extern void Py_SetPath(string home); | ||
| 719 | + internal static extern void Py_SetPath(IntPtr home); | ||
| 724 | 720 | #endif | |
| 725 | 721 | ||
| 726 | 722 | [DllImport(PythonDll)] | |
| Back | FazBrowse Home | New Git URL |
0 commit comments