windows-runtime - WiFiDirectDevice::FromIdAsync 抛出 Win32 控制台应用程序

标签 windows-runtime wifi-direct c++-cx

我正在尝试使用 Windows 10 SDK 中的 WiFiDirect API,并在 Win32 控制台应用程序中实现连接器方案。我已经在基本控制台应用程序和集成代码中启用了 C++/CX Microsoft's example on GitHub .

现在我可以成功发现设备,如果设备已经配对,甚至可以连接和传输数据。但是,当我尝试从头开始将它们配对时,FromIdAsync 任务以已取消结束,下面的最后一行引发异常,提示 “远程过程调用失败。”

        WiFiDirectConnectionParameters^ connectionParams = ref new WiFiDirectConnectionParameters();
        connectionParams->GroupOwnerIntent = (short)(wcstoul(txtGOIntent->Text->Data(), nullptr, 10));

        // IMPORTANT: FromIdAsync needs to be called from the UI thread
        concurrency::task<WiFiDirectDevice^> fromIdTask(WiFiDirectDevice::FromIdAsync(discoveredDevice->DeviceInfo->Id, connectionParams));
        fromIdTask.then([this](concurrency::task<WiFiDirectDevice^> fromIdResultTask)
        {
            try
            {
                WiFiDirectDevice^ wfdDevice = fromIdResultTask.get();

我认为它无法显示带有 PIN 输入的弹出窗口,但如何克服这个问题?

最佳答案

[更新] TH2 已经推出一段时间了,所以 custom device pairing API是我最初暗示的。有一个 SDK sample它还向您展示了如何使用它。 checkout 示例中的场景 9。

明确地说,您可以通过 3-4 种方式在应用中配对设备:

  1. 使用设备选择器控件,它可以内嵌配对设备
  2. 使用简单的配对 API。如前所述,它必须在应用程序 UI 线程上调用,否则 shell 可能无法确定在何处绘制应用程序模式对话框
  3. 使用自定义设备配对 API
  4. 使用入站配对 API(仅适用于物联网设备上的蓝牙)

Windows.Devices.Enumeration* 中的大多数 API 都被视为“双重”API,这意味着它们既可以在应用程序容器中工作,也可以在中等 IL win32 类型的进程中工作。异常(exception)情况是生成 UI 的 API(即 #1 和 #2),因此在您的场景中,只有 #3 可以在桌面控制台应用程序中运行。

在 TH2 之前,上面的 #2 会隐式发生。 RPC 调用失败,因为控制台应用程序不在应用程序容器中,因此 shell 无法注入(inject)模态对话框。

[原始回复] 显然这是一个应该可行的方案。您应该在 Threshold 2 中使用 WiFiDirect WinRT API 寻找对 win32 应用程序的更好支持。很快就会发布给大家。您现在可以尝试使用 Windows 10 的内部测试版本。我认为您问题中的场景应该可行。

我建议您随时查看 TH2 SDK。查看是否有新的 API 可以解决您的问题。发货后请联系我,我可以为您提供有关如何管理 WFD 配对的更多详细信息。

关于windows-runtime - WiFiDirectDevice::FromIdAsync 抛出 Win32 控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32583567/

相关文章:

android - Android Wifi Direct 中的对等通信

windows-runtime - C++/CX 中是否可以替代 C# 的等待? WIN10

c++ - 在 Windows 8 XAML 项目中使用 C++/CX 设置边距属性

c++ - 如何在 WinRT 中实现 UserControl

windows-8 - 是否可以在 Windows RT 上编程

c# - 在 XAML/C# 中使用多个字体文件定义自定义 FontFamily

c# - 如何动态调整 GridView 项目的大小?

c# - 从 Windows 8/WinRT 中的不同线程更新 UI 元素

android - wifi peer-2-peer(wifi direct)组自动认证

java - 我需要通过 WiFi-Direct 从传感器获取数据。如何向传感器发送命令?