Microsoft或Widcomm Stack上的Windows Mobile蓝牙访问

时间:2011-05-11 15:08:06

标签: java dll windows-mobile bluetooth java-native-interface

我有一个在Windows移动设备上运行的Java应用程序。我需要能够打开和关闭蓝牙,以便它执行一些本机代码来执行此操作。问题是我在新设备(HTC HD2)上尝试它并且本机代码不起作用。原因是HD2设备正在使用Widcomm蓝牙堆栈,而另一台设备使用的是Microsoft堆栈。

我现在已经找到了一种使用Widcomm SDK在HD2设备上激活蓝牙的方法。但是,这个本机代码需要能够在任何设备上运行,所以我需要能够在运行时决定根据哪个蓝牙堆栈运行哪些代码。

问题1:如何以编程方式确定哪个堆栈存在?

问题2:如果我包含Widcomm堆栈所需的头文件并尝试在不使用它的设备上运行它,则代码将失败。如果Widcomm dll存在,我该如何编译dll以便它只包含那个头文件?

1 个答案:

答案 0 :(得分:2)

我猜你必须动态地完成这一切:

  1. 在您自己的代码中声明必要的Widcomm函数的原型。
  2. 使用LoadLibrary加载Widcomm dll。
  3. 如果LoadLibrary调用失败,那么您知道自己在Microsoft堆栈上,并且可以运行标准的Microsoft堆栈函数。
  4. 如果LoadLibrary成功,您就可以使用Widcomm堆栈并可以使用Widcomm功能。
  5. 根据Widcomm标头需要多少函数,它可能有点乱,但你不能静态编译对这些函数的引用,因为它会尝试加载它而不是找到它(这可能是为什么你看到了崩溃。)

    Windows Mobile上存在蓝牙堆栈疯狂的情况真的太可怕了。以为仅限于桌面。