Функция в C DLL выглядит следующим образом:
Мне нужно вызвать это из приложения C#. Я делаю это следующим образом:
Код: Выделить всё
...DllImport stuff...
public static extern int my_Funct(string input, string output);
Входная строка прекрасно передается в DLL (у меня есть наглядное тому подтверждение). Вывод, который заполняет функция, хотя и неверен. У меня есть шестнадцатеричные данные, например:
Но, к сожалению, все, что находится после двух нулей, обрезается, и в мое приложение на C# поступают только первые два байта. Это происходит потому, что (я думаю) он воспринимает его как нулевой символ и воспринимает его как конец строки.
Есть идеи, как от него избавиться? Я попытался указать его как Out IntPtr вместо строки, но не знаю, что с ним делать потом.
Я пытался сделать после:
Код: Выделить всё
byte[] b1 = new byte[2];
Marshal.Copy(output,b1,0,2);
2 обычно равна длине массива байтов. Но я получаю всевозможные ошибки: например, «Запрошенный диапазон выходит за пределы конца массива». или «Попытка чтения или записи защищенной памяти...»
Благодарю за любую помощь.
Подробнее здесь:
https://stackoverflow.com/questions/152 ... characters