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