@@ -667,41 +667,8 @@ internal unsafe static extern IntPtr
667
667
public unsafe static extern int
668
668
Py_Main (
669
669
int argc ,
670
- IntPtr lplpargv
670
+ [ MarshalAs ( UnmanagedType . CustomMarshaler , MarshalTypeRef = typeof ( StrArrayMarshaler ) ) ] string [ ] argv
671
671
) ;
672
-
673
- public static int Py_Main ( int argc , string [ ] argv )
674
- {
675
- // Totally ignoring argc.
676
- argc = argv. Length;
677
-
678
- var allStringsLength = 0 ;
679
- foreach ( string x in argv)
680
- {
681
- allStringsLength += x . Length + 1 ;
682
- }
683
- int requiredSize = IntPtr . Size * argc + allStringsLength * UCS ;
684
- IntPtr mem = Marshal . AllocHGlobal ( requiredSize ) ;
685
- try
686
- {
687
- // Preparing array of pointers to UTF32 strings.
688
- IntPtr curStrPtr = mem + argc * IntPtr. Size;
689
- for ( var i = 0 ; i < argv . Length ; i++ )
690
- {
691
- // Unicode or UTF8 work
692
- Encoding enc = UCS == 2 ? Encoding. Unicode : Encoding. UTF32;
693
- byte [ ] zstr = enc. GetBytes( argv [ i ] + "\0 " ) ;
694
- Marshal. Copy ( zstr , 0 , curStrPtr , zstr . Length ) ;
695
- Marshal. WriteIntPtr ( mem + IntPtr . Size * i , curStrPtr ) ;
696
- curStrPtr += zstr. Length ;
697
- }
698
- return Py_Main( argc , mem ) ;
699
- }
700
- finally
701
- {
702
- Marshal. FreeHGlobal ( mem ) ;
703
- }
704
- }
705
672
#elif PYTHON2
706
673
[ DllImport ( Runtime . dll , CallingConvention = CallingConvention . Cdecl ,
707
674
ExactSpelling = true , CharSet = CharSet . Ansi ) ]
@@ -2078,41 +2045,9 @@ internal unsafe static extern IntPtr
2078
2045
internal unsafe static extern void
2079
2046
PySys_SetArgvEx (
2080
2047
int argc ,
2081
- IntPtr lplpargv ,
2048
+ [ MarshalAs ( UnmanagedType . CustomMarshaler , MarshalTypeRef = typeof ( StrArrayMarshaler ) ) ] string [ ] argv ,
2082
2049
int updatepath
2083
2050
) ;
2084
-
2085
- internal static void PySys_SetArgvEx ( int argc , string [ ] argv , int updatepath )
2086
- {
2087
- // Totally ignoring argc.
2088
- argc = argv. Length;
2089
-
2090
- var allStringsLength = 0 ;
2091
- foreach ( string x in argv)
2092
- {
2093
- allStringsLength += x. Length + 1 ;
2094
- }
2095
- int requiredSize = IntPtr. Size * argc + allStringsLength * UCS;
2096
- IntPtr mem = Marshal. AllocHGlobal( requiredSize ) ;
2097
- try
2098
- {
2099
- // Preparing array of pointers to UTF32 strings.
2100
- IntPtr curStrPtr = mem + argc * IntPtr. Size;
2101
- for ( var i = 0 ; i < argv. Length; i++ )
2102
- {
2103
- Encoding enc = UCS == 2 ? Encoding. Unicode : Encoding. UTF32;
2104
- byte [ ] zstr = enc. GetBytes( argv [ i ] + "\0 " ) ;
2105
- Marshal. Copy ( zstr , 0 , curStrPtr , zstr . Length ) ;
2106
- Marshal. WriteIntPtr ( mem + IntPtr . Size * i , curStrPtr ) ;
2107
- curStrPtr += zstr. Length ;
2108
- }
2109
- PySys_SetArgvEx( argc , mem , updatepath ) ;
2110
- }
2111
- finally
2112
- {
2113
- Marshal. FreeHGlobal ( mem ) ;
2114
- }
2115
- }
2116
2051
#elif PYTHON2
2117
2052
[ DllImport ( Runtime . dll , CallingConvention = CallingConvention . Cdecl,
2118
2053
ExactSpelling = true, CharSet = CharSet . Ansi ) ]
0 commit comments