Я пишу плагин для проекта C++, и я использую пакет UnmanagedExports Nuget, который позволяет экспонировать функции C в управляемом коде .NET. https://www.nuget.org/packages/UnmanagedExportsОбратный pinvoke char * [] using StringBuilder
Я написал плагин, который принимает строку (определяется как символ * в 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++ определяет вызов как требующий char * []
Это НЕ работает.
[DllExport("GetString", CallingConvention = CallingConvention.Cdecl)]
public static void GetString(StringBuilder[] MyString)
{
}
Золотое правило должно сначала написать функцию C, которая принимает те же аргументы и, скажем, отображает их значение с помощью printf(). Вы полностью гарантированно обнаружите проблему: *, как долго массив? * Вы не знаете, C# не знает, Giesecke не знает. Просто не пропустите этот шаг, если вы еще не понимаете неуправляемый код. –
@ HansPassant Спасибо за вход, указывающий на меня в правильном направлении. Ive добавил мой ответ ниже, но это только позволяет мне передать массив строк. Изменения в массиве не отражаются в коде вызывающего абонента, если он изменен. – CathalMF