我有一个C ++ Windows蓝牙应用程序,它构建在运行2008 r2的Jenkins CI服务器上。应用程序构建良好,并在安装了Microsoft蓝牙堆栈的计算机上运行。不幸的是,Server 2008 r2上没有蓝牙支持,这阻止了在构建服务器上执行我们的gtest单元测试项目。
单元测试本身不使用蓝牙堆栈,但由于其他库代码包含对BluetoothFindFirstRadio和BluetoothGetRadioInfo的调用,因此单元测试应用程序根本不会运行。这些调用在bthprops.cpl中实现,这在Windows Server 2008 r2中不存在。
所以我可以通过多种方式解决这个问题,但不幸的是我无法找到这些问题的答案:
1)是否有其他方法可以获取BluetoothGetRadioInfo以外的本地蓝牙设备的地址?这将允许我打破对bthprops.cpl的链接依赖。
2)有没有办法让Windows Server 2008认为bthprops.cpl库在机器上?或者甚至欺骗我的单元测试可执行文件,使其认为它可以执行?
3)有没有办法在编译时识别我在Windows Server上,所以我可以#ifdef我的单元测试项目中的那些函数?
谢谢!
答案 0 :(得分:1)
我使用LoadLibrary / FreeLibrary和GetProcAddress来获取BluetoothFindFirstRadio / BluetoothGetRadioInfo / ...的函数指针,因此您的应用程序可以正常运行而不会出现系统错误("程序无法启动,因为bthprops。您的计算机中缺少cpl。尝试重新安装程序以解决此问题。")无论是否有bthprops.cpl。
我希望这对你有所帮助!