Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Serial Communication DLL

#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" изменяется (бывают проблемы с кодировкой). Еще как вариант запустите приложение под администратором.

Комментариев нет:

Отправить комментарий