Обратный pinvoke char *[] с использованием StringBuilder

Я пишу плагин для проекта C++, и я пользуюсь пакетом UnmanagedExports Nuget, который позволяет использовать функции C в управляемом.NET-коде. https://www.nuget.org/packages/UnmanagedExports

Я написал плагин, который получает строку (определенную как char * в C++). Ниже приведен метод UnmanagedExport, который я определил для этой работы.

[DllExport("GetString", CallingConvention = CallingConvention.Cdecl)]
public static void GetString(StringBuilder MyString)
{            
    //Use and modify the StringBuilder. It receives the string passed and returns the modified version because it is being passed by reference. 
}

Приведенный выше код работает прекрасно.

Теперь вопрос заключается в том, как я могу передать массив строк в мой код UnmanagedExport. C++ определяет вызов как требующий символ *[]

Это не работает.

[DllExport("GetString", CallingConvention = CallingConvention.Cdecl)]
public static void GetString(StringBuilder[] MyString)
{            
}

1 ответ

Это позволяет передавать строку [], но это только один путь.

[DllExport("GetStrings", CallingConvention = CallingConvention.Cdecl)]
public static void GetStrings([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]string[] MyStrings, int size)
{
    foreach(var s in MyStrings)
    {
        MessageBox.Show(s);
    }
}
Другие вопросы по тегам