Marshal an array of strings from C# to C code using p/invoke

后端 未结 3 1287
广开言路
广开言路 2020-12-11 10:39

I need to pass an array of C# strings into C code

Example C code

void print_string_array(const char** str_array, int length){
    for (int i = 0; i &         


        
3条回答
  •  猫巷女王i
    2020-12-11 11:18

    Your second attempt is quite close. Try the following:

    string[] foo = {"testing", "one", "two", "three"};  
    IntPtr[] s_array = new IntPtr[foo.Length];
    
    for(int i = 0; i < foo.Length; ++i) 
    {
        s_array[i] = Marshal.StringToHGlobalAnsi(foo[i])
    }
    GCHandle gH = GCHandle.Alloc(s_array, GCHandleType.Pinned);
    print_string_array( gH.AddrOfPinnedObject(), s_array.Length);
    gH.Free();
    for(int i = 0; i < foo.Length; ++i) 
    {
        Marshal.FreeHGlobal(s_array[i])
    }
    
    [DllImport(my_C_dll, CharSet = CharSet.Ansi)]
    private static extern int print_string_array(IntPtr sa, int length);
    

提交回复
热议问题