Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows runtime 如何使用WRL在Win32控制台应用程序中激活IWiFiDirectDevice?_Windows Runtime_Wifi Direct_Wrl - Fatal编程技术网

Windows runtime 如何使用WRL在Win32控制台应用程序中激活IWiFiDirectDevice?

Windows runtime 如何使用WRL在Win32控制台应用程序中激活IWiFiDirectDevice?,windows-runtime,wifi-direct,wrl,Windows Runtime,Wifi Direct,Wrl,我想在Win32控制台应用程序中直接从Windows 10 SDK使用用于WiFi的WinRT API。我了解C++/CX(甚至在这方面取得了一些进展),但仍然希望在没有此扩展的情况下使其工作 我的问题是无法激活IWifiDirectDevice接口(从ABI::Windows::Devices::WiFiDirect)来访问提供GetDeviceSelector方法的IWifiDirectDeviceStatics HStringReference strDevice(RuntimeClass

我想在Win32控制台应用程序中直接从Windows 10 SDK使用用于WiFi的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());
HStringReference标准设备(运行时类\u Windows\u设备\u WiFiDirect\u WiFiDirectDevice);
文书主任督察;
hr=RoActivateInstance(strDevice.Get(),insp.GetAddressOf());
这段代码的结果是E_NOTIMPL。在微软,他们使用工厂进行激活,但ABI::Windows::Devices::WiFiDirect命名空间没有工厂

值得一提的是,IWifiDirectAdvertisementPublisher在以我之前编写的方式激活时工作正常


那么如何从WRL激活IWifiDirectDevice?

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);
HStringReference标准设备(运行时类\u Windows\u设备\u WiFiDirect\u WiFiDirectDevice);
ComPtr wiFiDirectDeviceStatics;
hr=Windows::Foundation::GetActivationFactory(
strDevice.Get(),
&wiFiDirectDeviceStatics);
ComPtr-wiFiDirectDevice;
ComPtr异步操作;
hr=wiFiDirectDeviceStatics->FromIdAsync(deviceId.Get(),&asyncOperation);

考虑看一看非常不清楚的.

(我指的是API),要初始化WiFiDirectDeviceStatic,我需要将其传递给GetActivationFactory。。。我想GetActivationFactory应该会产生一个工厂…@Yrchgrchh是的,这让人困惑。很抱歉GetActivationFactory实际上是GetStaticStuff,但是它的想法是,大多数时候你都会得到工厂,所以他们以大多数人使用它的目的命名它。