Доступ по Bluetooth для Windows Mobile в стеке Microsoft или Widcomm

#java #dll #windows-mobile #bluetooth #java-native-interface

#java #dll #windows-mobile #bluetooth #java-родной интерфейс

Вопрос:

У меня есть Java-приложение, которое запущено на устройстве Windows Mobile. Мне нужно иметь возможность включать и выключать Bluetooth, чтобы для этого выполнялся некоторый собственный код. Проблема в том, что я пробую это на новом устройстве (HTC HD2), и собственный код не работает. Причина этого в том, что устройство HD2 использует стек Widcomm Bluetooth, в то время как другое устройство использовало стек Microsoft.

Теперь я нашел способ активировать Bluetooth на устройстве HD2 с помощью Widcomm SDK. Однако этот собственный код должен быть способен запускаться на любом устройстве, поэтому каким-то образом мне нужно иметь возможность принимать решение во время выполнения, какой код запускать, на основе того, какой стек Bluetooth присутствует.

Вопрос 1: как я могу программно определить, какой стек присутствует?

Вопрос 2. если я включу файл заголовка, необходимый для стека Widcomm, и попытаюсь запустить его на устройстве, которое его не использует, произойдет сбой кода. Как я могу скомпилировать dll, чтобы она включала этот заголовочный файл только в том случае, если библиотека DLL Widcomm существует?

Ответ №1:

Я предполагаю, что вам может потребоваться сделать все это динамически:

  1. Объявите прототипы для необходимых функций Widcomm в своем собственном коде.
  2. Используйте LoadLibrary для загрузки библиотеки DLL Widcomm.
  3. Если LoadLibrary вызов завершается неудачно, то вы знаете, что находитесь в стеке Microsoft, и можете запускать стандартные функции стека Microsoft.
  4. В случае LoadLibrary успешного выполнения вы находитесь в стеке Widcomm и можете использовать функции Widcomm.

Это может быть немного запутанным в зависимости от того, сколько функций вам нужно из заголовка Widcomm, но вы не можете статически скомпилировать ссылки на эти функции, поскольку он попытается загрузить его и не найдет (вероятно, поэтому вы видите сбой).

Это действительно ужасно, что сумасшествие со стеком Bluetooth существует и в Windows Mobile. Думал, что это ограничено рабочим столом.

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

1. Ну, в разных ОС я не настолько разбираюсь, но в рамках одного поставщика / платформы это просто смешно. Независимо от современной версии Linux, OSX остается той же, что и Android, как и iOS. Windows, похоже, является единственной ОС, в которой две установки одной и той же версии одной и той же ОС могут иметь разные интерфейсы к стеку Bluetooth.

2. Да. Интересно, кто принимает некоторые из этих решений — или как они принимают эти решения???

3. Они принимают решения? 🙂

4. 2Funny… Я думаю, они вывели свою ручную обезьянку, которая просто бросает экскременты в мишень для дартса … пресловутое «посмотрим, что застрянет».