Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 20.05.2017
Сообщений: 22
1

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

28.05.2017, 17:54. Показов 3526. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Есть такая функция в DLL:

C
1
IMPORTDLL int PIRITLIB_CALL openPort(char *fileName, long speed);
Я ее подключаю в C# и пытаюсь вызвать:

C#
1
2
3
4
[DllImport("PiritLib.dll")] public static extern int openPort(string fileName, long speed);
//...
 
openPort("COM5", 57600);
В документации написано, что функция ждет именно строку (наименование COM порта). Однако, при попытки передать строку, вызывается ошибка:

...Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой.
Оно и понятно, ведь в .h файле там ожидается char. Пробую передать Char:

C#
1
2
3
4
[DllImport("PiritLib.dll")] public static extern int openPort(char fileName, long speed);
//...
 
openPort('5', 57600);
Ошибка уже другая:

Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
Пробовал char[] - тоже ошибка.

Тут отечественное ПО и разработка ведется методом тыка. Куда бы еще тыкнуть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2017, 17:54
Ответы с готовыми решениями:

Вызов функции из DLL
Привет. Почему не получается вызвать DllImport из метода? using System; using...

Вызов функции из dll
Добрый вечер. Написал на C# dll'ку, в которой данная функция для расчета параметров. public...

Вызов функции из DLL, написанной на Delphi
Здрасте, У меня тут такая ситуация: Рыскал как то я, по просторам интернета, решение 1 проблемы,...

Вызов функции из DLL (C++) с передачей указателя на массив
Добрый день! Проблема следующая: нужно вызвать функцию из DLL (написана на c++). При этом в...

2
Эксперт .NET
6508 / 4085 / 1605
Регистрация: 09.05.2015
Сообщений: 9,551
28.05.2017, 18:06 2
Оставьте string и Calling Convention другой попробуйте, и int вместо long.
1
0 / 0 / 1
Регистрация: 20.05.2017
Сообщений: 22
28.05.2017, 18:19  [ТС] 3
OH GOD WHY

Протыкал порядка 100 разных комбинаций int-long-string-char-CallingConvention и вот так заработало. Спасибо!

C#
1
2
3
        [DllImport("PiritLib.dll", CallingConvention = CallingConvention.Winapi)] public static extern int openPort(string fileName, int speed);
//..
            int result = openPort("COM5", 57600);
0
28.05.2017, 18:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2017, 18:19
Помогаю со студенческими работами здесь

Вызов dll Delphi из C#
Почему выскакивает ошибка An unhandled exception of type 'System.StackOverflowException' если...

Вызов кода из dll
Всем привет! Подскажите как сделать так чтобы какой то определенный код например для кнопки работал...

Вызов метода из dll
Здравствуйте. Имеется dll, в котором определен класс Class1 и метод Method1. Нужно вызвать...

Вызов функции из dll написанной на C
Привет всем! Возникла такая задача, решить не могу ни как. Есть dll. В ней есть функция (вроде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru