PInvoke char* в C DLL обрабатывается как строка в C#. Проблема с нулевыми символамиC#

Место общения программистов C#
Ответить
Anonymous
 PInvoke char* в C DLL обрабатывается как строка в C#. Проблема с нулевыми символами

Сообщение Anonymous »

Функция в 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# поступают только первые два байта. Это происходит потому, что (я думаю) он воспринимает его как нулевой символ и воспринимает его как конец строки.

Есть идеи, как от него избавиться? Я попытался указать его как Out IntPtr вместо строки, но не знаю, что с ним делать потом.
Я пытался сделать после:

Код: Выделить всё

 byte[] b1 = new byte[2];
Marshal.Copy(output,b1,0,2);
2 обычно равна длине массива байтов. Но я получаю всевозможные ошибки: например, «Запрошенный диапазон выходит за пределы конца массива». или «Попытка чтения или записи защищенной памяти...»

Благодарю за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/152 ... characters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»