#c_sharp #cpp #dll #serial
Пытаюсь написать dll на С++ для связи с com-портами, где dll будет использоваться через DllImport в С#. Код пишется на примере msdn Для начала я попытался использовать данный пример в консольной аппликации : static SerialPort^ _serialPort; static void Main() _serialPort = gcnew SerialPort("COM9"); _serialPort->ReadTimeout = 500; _serialPort->WriteTimeout = 500; _serialPort->Open(); _serialPort->WriteLine(String::Format("test")); _serialPort->Close(); все замечательно работает (вылавливаю сообщение test через putty), но при попытке использовать тот же код, но уже через dll: static void Main() { SerialPort^ _serialPort = gcnew SerialPort("COM9"); _serialPort->ReadTimeout = 500; _serialPort->WriteTimeout = 500; _serialPort->Open(); _serialPort->WriteLine(String::Format("test")); _serialPort->Close(); } int pOpen() { PortChat::Main(); return 1; } прилетает вот такое вот зло: System.UnauthorizedAccessException: Access to the port 'COM9' is denied. Собственно, что я делаю не так? (и вполне вероятно, что я делаю не так ВСЁ из-за не понимания) Стоит добавить что часть C# (которая вызывает dll) работает через JavaScript. То есть все это несчастье запускается через default.html. Огромное спасибо.
Ответы
Ответ 1
Вы пробовали запускать приложение от имени администратора? Может имеет смысл попробовать реализовать инициализацию последовательного порта средствами winApi (FileRead), там можно и параметры безопасности использовать. Вообще, лучше (наверно) использовать стандартный класс последовательного порта, присутствующий в .NET.Ответ 2
Проверьте может при компиляции dll "COM9" изменяется (бывают проблемы с кодировкой). Еще как вариант запустите приложение под администратором.
Комментариев нет:
Отправить комментарий