2016-12-13 28 views
0

Я пишу плагин для проекта 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) 
{    
} 
+1

Золотое правило должно сначала написать функцию C, которая принимает те же аргументы и, скажем, отображает их значение с помощью printf(). Вы полностью гарантированно обнаружите проблему: *, как долго массив? * Вы не знаете, C# не знает, Giesecke не знает. Просто не пропустите этот шаг, если вы еще не понимаете неуправляемый код. –

+0

@ HansPassant Спасибо за вход, указывающий на меня в правильном направлении. Ive добавил мой ответ ниже, но это только позволяет мне передать массив строк. Изменения в массиве не отражаются в коде вызывающего абонента, если он изменен. – CathalMF

ответ

0

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