Вызов функции из DLL - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! Есть такая функция в DLL:
IMPORTDLL int PIRITLIB_CALL openPort(char *fileName, long speed);
Я ее подключаю в C# и пытаюсь вызвать:
[DllImport("PiritLib.dll")] public static extern int openPort(string fileName, long speed);
//...
 
openPort("COM5", 57600);
В документации написано, что функция ждет именно строку (наименование COM порта). Однако, при попытки передать строку, вызывается ошибка:
...Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой.
Оно и понятно, ведь в .h файле там ожидается char. Пробую передать Char:
[DllImport("PiritLib.dll")] public static extern int openPort(char fileName, long speed);
//...
 
openPort('5', 57600);
Ошибка уже другая:
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
Пробовал char[] - тоже ошибка. Тут отечественное ПО и разработка ведется методом тыка. Куда бы еще тыкнуть?

Решение задачи: «Вызов функции из DLL»

textual
Листинг программы
        [DllImport("PiritLib.dll", CallingConvention = CallingConvention.Winapi)] public static extern int openPort(string fileName, int speed);
//..
            int result = openPort("COM5", 57600);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5