从C ++ / Winrt UWP应用程序调用旧版Win32 API

时间:2018-08-17 08:18:20

标签: c++-winrt

是否可以从使用C ++ / WinRT编写的UWP应用中调用旧版Win32 API?我正在尝试从BluetoothApis.h调用旧版API。

这可能吗?应用程序是纯桌面应用程序。谢谢。

1 个答案:

答案 0 :(得分:2)

here列出了UWP应用程序仅支持的Win32 API。

所有其他Win32旧版API均不可用,这意味着:

  • 标头中的WINAPI_FAMILY_PARTITION宏不会为那些不受支持的函数定义声明,因此使用它们将导致编译时错误。

  • 如果您仍然尝试使用那些旧版Win32 API,那么当您提交到Windows应用商店时,WACK工具将检测到它并导致应用程序失败。

  • 如果您尝试在台式机(即Xbox One)以外的其他设备系列上运行不受支持的UWP应用,则可能会丢失那些旧版Win32导入。

如果您错误地配置了WINAPI_FAMILY宏或在本地声明了不受支持的功能,则只能进行侧面加载,因为您从未尝试提交到应用商店,而仅尝试在台式机上运行它,则该功能可能会或可能会无论如何都不行。这取决于Win32旧版功能如何对所有UWP在其中运行的AppContainer进程上下文的受限ACL做出反应。

TL; DR:不,您不能在UWP应用中使用BluetoothAPis.h

#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

.. all functions and types in BluetoothApis.h are here...

#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion