2014-03-13 220 views
0

我有一個C++ Windows藍牙應用程序,它構建在運行2008 r2的Jenkins CI服務器上。應用程序生成良好,並在安裝了Microsoft藍牙堆棧的計算機上運行。不幸的是,Server 2008 r2上沒有藍牙支持,這會阻止在構建服務器上執行我們的gtest單元測試項目。在Windows Server 2008 r2上替代BluetoothGetRadioInfo

單元測試本身不使用藍牙堆棧,但由於其他庫代碼包含對BluetoothFindFirstRadio和BluetoothGetRadioInfo的調用,因此單元測試應用程序根本無法運行。這些調用在bthprops.cpl中實現,而Windows Server 2008 r2中不存在這些調用。

這樣我就可以在幾個方面解決這個問題,但不幸的是我無法找到答案,對這些問題:

1)是否有收購以外的藍牙設備地址的替代方法BluetoothGetRadioInfo?這將允許我打破對bthprops.cpl的鏈接依賴關係。

2)有沒有辦法讓Windows Server 2008認爲bthprops.cpl庫在機器上?甚至欺騙我的單元測試可執行文件認爲它在那裏,以便它可以執行?

3)有沒有一種方法可以在編譯時識別出我在Windows服務器上,這樣我就可以在單元測試項目中使用這些函數#ifdef了?

謝謝!

+0

附加信息:單元測試exe失敗,彈出窗口顯示「程序無法啓動,因爲您的計算機中缺少bthprops.cpl,請嘗試重新安裝程序以解決此問題。」從exe文件返回的代碼是-1073741515(C0000135) – Pickles

回答

1

我sussgest您使用的LoadLibrary/FreeLibrary則和GetProcAddress得到BluetoothFindFirstRadio/BluetoothGetRadioInfo/...的函數指針,因此應用程序可以在沒有系統誤差正常運行(以下簡稱「程序無法啓動,因爲bthprops.cpl從失蹤您的計算機,請嘗試重新安裝程序以解決此問題。「)不管是否存在bthprops.cpl。

我希望這對你有幫助!

+0

謝謝,我把這個標記爲答案,因爲它是完全合理的,一定會解決這個問題。我最終只是將這個功能隱藏在接口後面,以便我的單元測試不必鏈接到任何藍牙庫。 – Pickles

相關問題