Последовательный Bluetooth с С# и моно на Raspbian?

Я пытался создать последовательное приложение C# Windows Forms Bluetooth, а затем запустить его через Mono на моем Raspberry Pi 3. Я пробовал следующее:

String SelectedDevice = AvailableDevicesComboBox.SelectedItem.ToString();
BSerialPort = new SerialPort(SelectedDevice, 115200, Parity.None, 8, StopBits.One);
BSerialPort.Open();

Использование стандартной библиотеки System.IO.Ports.

Однако я не могу открыть порт, потому что получаю прекрасное исключение «Ссылка на объект не указывает на экземпляр объекта», что означает, что такого порта вообще нет. Я подключил устройство Bluetooth к RPi, используя один из слотов RFCOMM, а затем использовал его как последовательный (и успешно передал некоторые строки через «кошку» в терминале), но результат в моем приложении тот же, на самом деле это не так. не отображается в ComboBox. Поэтому я решил использовать библиотеку "32Feet-InTheHand" для Bluez и Mono вместе. Теперь, когда я запускаю свой .exe-файл в Mono, я получаю это в терминале:

Unhandled Exception: System.TypeLoadException: 
Could not load type of field 'NameOfApp.Form1:BClient' (1) due to:
Could not load file or assembly 'InTheHand.Net.Personal,
Version=3.5.605.0, Culture=neutral, PublicKeyToken=ea38caa273134499'
or one of its dependencies. assembly:InTheHand.Net.Personal, Version=3.5.605.0, 
Culture=neutral, PublicKeyToken=ea38caa273134499 type:<unknown type> member:<none>
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: 
Could not load type of field 'NameOfApp.Form1:BClient' (1) due to: Could not load file 
or assembly 'InTheHand.Net.Personal, Version=3.5.605.0, Culture=neutral, 
PublicKeyToken=ea38caa273134499' or one of its dependencies. assembly:InTheHand.Net.Personal, 
Version=3.5.605.0, Culture=neutral, PublicKeyToken=ea38caa273134499
 type:<unknown type> member:<none>

Я добавил ссылку и пометил ее как требуется на вкладке «Файлы приложения». Но я в этом совсем не силен...

Версия для Linux: Raspbian 9 — Linux raspberrypi 4.9.59-v7+ #1047

Сообщество Visual Studio 2017 версии 15.5.3

Mono: компилятор Mono JIT версии 5.4.1.6

32 фута.NET: 3.5.605


person Martin    schedule 14.01.2018    source источник
comment
Вы скопировали DLL на малину? Ошибка говорит, что не может загрузиться. Кроме того, я сомневаюсь, что вы сможете использовать любую из библиотек Bluetooth для Windows на Raspbian, все ретранслируются в нативные вызовы, что приведет к сбою вашего приложения. Кроме того, если вы уже подключили устройство, у вас должен быть /dev/rfcommx, вы можете открыть его как файл и читать/писать в него.   -  person Gusman    schedule 14.01.2018
comment
Думал также использовать символическую ссылку с ln -s, что я и сделал, но результаты те же. Я скопировал файлы .dll в тот же каталог, что и .exe. Спасибо за ваше предложение. :)   -  person Martin    schedule 14.01.2018


Ответы (1)


Итак, мне удалось решить проблему. Оказалось, что это была очень, очень глупая моя ошибка. Я неправильно объявил «BSerialPort». Следующее утверждение неверно:

BSerialPort = new SerialPort(SelectedDevice, 115200, Parity.None, 8, StopBits.One);

правильный способ объявить такой порт выглядит следующим образом:

SerialPort BSerialPort = new SerialPort(SelectedDevice, 115200, Parity.None, 8, StopBits.One);

Это маленькое определение «SerialPort» в начале объявления имеет большое значение.

Спасибо за вашу помощь и удачного кодирования! :)

person Martin    schedule 29.01.2018