BluetoothSelectDevices содержит ошибку MS?

Итак, я сузил непредсказуемые сбои в моем приложении до BluetoothSelectDevices функция. Предполагается, что пользователь может выбрать устройство.

#include <windows.h>
#include <Bthsdpdef.h>
#include <BluetoothAPIs.h>
#pragma comment(lib, "bthprops")
#pragma comment(lib, "user32")

bool getDevice(void)
{
BLUETOOTH_SELECT_DEVICE_PARAMS btsdp = { sizeof(btsdp) };

btsdp.hwndParent = NULL; // hDlg; // "set to NULL for no parent."btsdp.fShowUnknown = TRUE;
//  btsdp.fAddNewDeviceWizard = TRUE;
btsdp.fShowAuthenticated = TRUE;

BOOL b = BluetoothSelectDevices( &btsdp );
if ( b )
{
//         BLUETOOTH_DEVICE_INFO * pbtdi = btsdp.pDevices;
//         for ( ULONG cDevice = 0; cDevice < btsdp.cNumDevices; cDevice ++ )
//         {
//             if ( pbtdi->fAuthenticated || pbtdi->fRemembered )
//             {
//                 //
//                 //  TODO:      Do something usefull with the device info
//                 //
//             }
//
//             pbtdi = (BLUETOOTH_DEVICE_INFO *) ((LPBYTE)pbtdi + pbtdi->dwSize);
//         }

BluetoothSelectDevicesFree( &btsdp );
}
else
{
if (GetLastError() != ERROR_CANCELLED)
MessageBox(NULL, "BluetoothSelectDevices failed.", "Error", MB_OK);
return false;
}

return true;
}
int main(void){for (int i = 0; i < 10 && getDevice(); i++);return 0;}

В конечном итоге он столкнется с нарушением прав доступа, хотя может некоторое время работать идеально (вот почему я поместил его в цикл для упрощения тестирования).

После большого разочарования я перешел к файлу «BluetoothAPIs.h» и скопировал приведенный выше код почти дословно, как это было предложено Microsoft !! Я даже закомментировал несущественные части. Под VC9 строка компиляции так же проста как: «cl / ZI / RTCcsu main.cpp»

Возможно, кто-то может подсказать, что я делаю не так?

Отладчик не поможет. Это просто показывает сбой в ядре в 0x6CD1DCD9. Установка всех параметров явно, как я делаю ниже, не имеет значения.

memset(&btsdp, 0, sizeof(btsdp));
btsdp.dwSize = sizeof(BLUETOOTH_SELECT_DEVICE_PARAMS);
btsdp.cNumOfClasses = 0; // search for all devices
btsdp.prgClassOfDevices = NULL;
btsdp.pszInfo = L"Select Device..";
btsdp.hwndParent = NULL;
btsdp.fForceAuthentication = FALSE;
btsdp.fShowAuthenticated = TRUE;
btsdp.fShowRemembered = TRUE;
btsdp.fShowUnknown = TRUE;
btsdp.fAddNewDeviceWizard = FALSE;
btsdp.fSkipServicesPage = FALSE;
btsdp.pfnDeviceCallback = NULL; // no callback
btsdp.pvParam = NULL;
btsdp.cNumDevices = 0; // no limit
btsdp.pDevices = NULL;

Заранее спасибо.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …