PInvoke char * в C DLL обрабатывается как String в C #. Проблема с нулевыми символами
Функция в C DLL выглядит так:
int my_Funct(char* input, char* output);
Я должен назвать это из приложения C #. Я делаю это следующим образом:
...DllImport stuff...
public static extern int my_Funct(string input, string output);
Входная строка отлично передается в DLL (у меня есть видимые доказательства этого). Вывод, который заполняет функция, хотя и неверен. У меня есть данные гекса в нем, например:
3F-D9-00-01
Но, к сожалению, все, что находится после двух нулей, обрезается, и только первые два байта попадают в мое приложение C #. Это происходит потому, что (я думаю) он обрабатывается как нулевой символ и принимает его как конец строки.
Есть идеи, как мне от этого избавиться? Я попытался указать его как IntPtr вместо строки, но я не знаю, что с ним делать потом. Я пытался сделать после:
byte[] b1 = new byte[2];
Marshal.Copy(output,b1,0,2);
2 обычно должна быть длиной байтового массива. Но я получаю всевозможные ошибки: например, «Запрошенный диапазон простирается до конца массива». или "Попытка чтения или записи в защищенную память ..."
Я ценю любую помощь.