2

因此,我将应用程序中不可预测的崩溃范围缩小到了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”文件并按照微软的建议几乎逐字复制了上面的代码!我什至注释掉了不重要的部分。在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;

提前致谢。

4

0 回答 0