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