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 обычно должна быть длиной байтового массива. Но я получаю всевозможные ошибки: например, «Запрошенный диапазон простирается до конца массива». или "Попытка чтения или записи в защищенную память ..."

Я ценю любую помощь.

Ответы на вопрос(1)

Ваш ответ на вопрос