【问题标题】:Call legacy Win32 API from C++/Winrt UWP app从 C++/Winrt UWP 应用调用旧版 Win32 API
【发布时间】:2018-08-17 08:18:20
【问题描述】:

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

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

【问题讨论】:

  • “桌面应用”“UWP 应用” 是互斥的。你的目标是哪个平台?这是确定任何特定 API 可用性的决定因素。 C++/WinRT 是一个库,可用于针对任一平台。
  • 针对 Windows !0。喜欢 WinRT 的精美抽象 API。但想使用旧的 BluetoothRemoveDevice API 来避免在取消配对设备时出现确认提示。
  • Windows 10 可以运行 UWP 应用以及桌面应用。您的目标是哪种应用程序类型?标题是“UWP app”,但问题是“App is a pure desktop app”。这些是相互排斥的,您需要说明您的目标平台是什么,才能让这个问题得到解答。

标签: c++-winrt


【解决方案1】:

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

所有其他 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

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 2015-04-29
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多