1

我已经尝试过创建一个 Windows-10 C++ UWP xaml 应用程序。

我选择这个平台的动机是避免使用多种语言(用于 WPF gui 的 C#,用于互操作的 C++-CLI)并且仅将 C++ 与一些 C++-CX 一起使用。

我的目标是创建一个用于调试 PCI 驱动程序的内部工具,而不是创建某种高度安全的 Windows 商店应用程序。

在我看来,UWP 应用程序在使用某些 WIN API 函数时非常严格。例如,我不能使用我的静态库,因为它们使用 CreateFile 和 DeviceIoControl。我收到一条错误消息:error C3861: 'CreateFileA': identifier not found.

即使我以某种方式设法链接我的本机库(通过在 .cpp 文件中隐藏这些函数的使用)这些函数似乎在运行时失败。

反正有没有绕过这些限制?我只想将此平台用于其 C++ UI 功能。

4

2 回答 2

4

关于这些坏消息我很遗憾。事实上,如果您不符合上述限制,您的选择不是 UWP。改为使用 WPF。

UWP 应用旨在用于集中控制。因此,您可以通过 Store 分发它们,限制它们的文件系统访问,管理内存占用和生命周期等。您可以将其视为尝试停止 Win32 API(它相当陈旧,容易受到黑客攻击且无政府主义)并使用沙-拳击作为替代者。

于 2018-05-03T09:08:10.933 回答
2

许多“旧的”win32 函数在 Windows 1803 中仍然可用或已经可用。以 UWP API 为目标当然与 Win32 API 不同。Microsoft 在以下位置提供了官方支持的 Win32 API 列表: https ://docs.microsoft.com/en-us/uwp/win32-and-com/win32-apis

CreateFileA 不在该列表中,但 CreateFile2 在。

对于设备访问,UWP 在命名空间 Windows.Devices.Custom 中提供功能

LoadLibrary\GetProcAddress 也可以是一个解决方案。

大多数限制仅适用于上传到应用商店的 UWP 应用,不适用于并行加载的应用。您可以只创建包并将其放在本地网络共享或 http 服务器上。

于 2018-06-20T21:25:52.323 回答