如何解决MFC 应用程序在“co_await BluetoothLEDevice::FromIdAsync”调用后挂起
我有一个使用 BLE DLL 的 MFC 应用程序。 BLE 库将负责设备扫描、连接等。
我尝试动态链接 BLE DLL。蓝牙设备扫描完成,没有任何问题。当我尝试从 BLE DLL 调用 ConnectToDevice API 时出现问题。
该 API 可用于除 MFC 之外的其他 C++ 框架。我刚刚创建了一个基于对话框的 MFC 应用程序,并从简单的按钮单击事件调用了 BLE 库 API。
这是示例代码
fire_and_forget SensorDeviceInfo::ConnectToDevice(condition_variable& signal,bool& bConnected)
{
// Returns a BluetoothLEDevice object for the given Id and initiate a connection
m_BluetoothLEDevice = co_await BluetoothLEDevice::FromIdAsync(GetId());
if (m_BluetoothLEDevice == nullptr)
{
LogError(m_Log,__func__,"Failed to connect to device.");
}
if (m_BluetoothLEDevice != nullptr)
{
m_ConnectionStatusEventToken = m_BluetoothLEDevice.ConnectionStatusChanged({ this,&SensorDeviceInfo::ConnectionStatusChangeHandler });
}
signal.notify_one();
}
由于这是一个异步调用,我使用条件变量来阻塞线程,直到函数完成。
mutex mtxConnect;
unique_lock lockConnect(mtxConnect);
condition_variable cvConnect;
// Connect to the sensor ble device
m_CurrentDevice->ConnectToDevice(cvConnect,bConnected);
cvConnect.wait(lockConnect);
在调试应用程序时,调用进入FromIdAsync位置,但过了一段时间它被挂起并且调用堆栈消失了。
我使用的是 VS2019 和最新的可再发行包(2019)。
在检查依赖项工具时,我可以看到 Windows\System32 文件夹中缺少一些 DLL。
缺少的 DLL 是 api-ms-win-core-wow64-l1-1-0.dll、api-ms-win-core-wow64-l1-1-1.dll、api-ms-win-core -winrt-string-l1-1-0.dll。这里 api-ms-win-core-wow64-l1-1-0.dll、api-ms-win-core-winrt-string-l1-1-0.dll 在其他 windows 位置可用。
但是系统中不存在 DLL api-ms-win-core-wow64-l1-1-1.dll。
下面是Dependencies工具给出的依赖问题
我已经检查了其他同事机器上的 mfc140.dll。他们的机器也存在依赖性问题。
我不知道这个 DLL 缺失问题是否是我们 Library API ConnectToDevice 的主要原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。