Обратный 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);
}
}