2

我想在 Win32 控制台应用程序中使用来自 Windows 10 SDK 的 WiFi Direct 的 WinRT API。我了解 C++/CX(甚至在这方面取得了一些进展),但仍然希望在没有此扩展的情况下使其工作。

我的问题是我无法激活 IWifiDirectDevice 接口(来自 ABI::Windows::Devices::WiFiDirect)来访问提供 GetDeviceSelector 方法的 IWifiDirectDeviceStatics。

HStringReference strDevice(RuntimeClass_Windows_Devices_WiFiDirect_WiFiDirectDevice);

ComPtr<IInspectable> insp;
hr = RoActivateInstance(strDevice.Get(), insp.GetAddressOf());

结果,此代码以 E_NOTIMPL 结尾。在 Microsoft 的示例中,他们使用工厂进行激活,但 ABI::Windows::Devices::WiFiDirect 命名空间没有工厂。

值得一提的是,当按照我之前编写的方式激活时,IWifiDirectAdvertisementPublisher 工作得很好。

那么如何从 WRL 激活 IWifiDirectDevice 呢?

4

1 回答 1

3

Windows.Devices.WiFiDirect.WiFiDirectDevice不是可激活的类。您可以通过查看windows.devices.wifidirect.idl.

您将需要使用静态方法,例如:

HStringReference strDevice(RuntimeClass_Windows_Devices_WiFiDirect_WiFiDirectDevice);

ComPtr<IWiFiDirectDeviceStatics> wiFiDirectDeviceStatics;
hr = Windows::Foundation::GetActivationFactory(
    strDevice.Get(),
    &wiFiDirectDeviceStatics);

ComPtr<IWiFiDirectDevice> wiFiDirectDevice;
ComPtr<IAsyncOperation<WiFiDirectDevice*>> asyncOperation;
hr = wiFiDirectDeviceStatics->FromIdAsync(deviceId.Get(), &asyncOperation);

考虑查看Wi-Fi Direct 示例

于 2015-09-17T15:47:52.100 回答