@@ -667,41 +667,8 @@ internal unsafe static extern IntPtr
667667 public unsafe static extern int
668668 Py_Main (
669669 int argc ,
670- IntPtr lplpargv
670+ [ MarshalAs ( UnmanagedType . CustomMarshaler , MarshalTypeRef = typeof ( StrArrayMarshaler ) ) ] string [ ] argv
671671 ) ;
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- }
705672#elif PYTHON2
706673 [ DllImport ( Runtime . dll , CallingConvention = CallingConvention . Cdecl ,
707674 ExactSpelling = true , CharSet = CharSet . Ansi ) ]
@@ -2078,41 +2045,9 @@ internal unsafe static extern IntPtr
20782045 internal unsafe static extern void
20792046 PySys_SetArgvEx (
20802047 int argc ,
2081- IntPtr lplpargv ,
2048+ [ MarshalAs ( UnmanagedType . CustomMarshaler , MarshalTypeRef = typeof ( StrArrayMarshaler ) ) ] string [ ] argv ,
20822049 int updatepath
20832050 ) ;
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- }
21162051#elif PYTHON2
21172052 [ DllImport ( Runtime . dll , CallingConvention = CallingConvention . Cdecl,
21182053 ExactSpelling = true, CharSet = CharSet . Ansi ) ]
0 commit comments