【问题标题】:How to activate IWiFiDirectDevice in Win32 Console APP using WRL?如何使用 WRL 在 Win32 控制台 APP 中激活 IWiFiDirectDevice?
【发布时间】:2015-09-17 12:30:19
【问题描述】:

我想在 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 作为结果。在微软的example 中,他们使用工厂进行激活,但 ABI::Windows::Devices::WiFiDirect 命名空间没有工厂。

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

那么如何从 WRL 激活 IWifiDirectDevice?

【问题讨论】:

    标签: windows-runtime wifi-direct wrl


    【解决方案1】:

    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 sample

    【讨论】:

    • 这太不清楚了(我的意思是 API),要初始化 WiFiDirectDeviceStatic 我需要将它传递给 GetActivationFactory...我认为 GetActivationFactory 应该生产一个工厂...
    • @Yrchgrchh 是的,这令人困惑。对不起。 GetActivationFactory 确实是 GetStaticStuff,但其想法是大多数时候您都在获取工厂,因此他们以大多数人将使用它的方式命名它。
    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多