问题标签 [c++-winrt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用 VS C++ Compiler 15.0 和 C++17 构建 Qt 项目以使用 WinRT API
我想从使用 Qt 5.9.2 for UWP 64bit (MSVC 2017) 创建的 UWP 应用程序中使用通过 WinRT API 可用的库(如这些)。我的机器上安装了 Visual Studio Build Tool 2017 v15.5.7。Windows 10 是我的操作系统。
现在,我已经设置了一个套件,如下所示。
然后,在.pro
文件中,我添加了:
我cppwinrt
从GitHub 代表处获得。
我只是添加了一些行main.cpp
来测试正确的编译:
运行qmake
and后build
,我收到此错误:
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.12.25827\include\optional(15): 致命错误 C1189: #error: class template optional 仅适用于 C+ +17。
Windows 文档清楚地指出,从 v15.3(我再一次,我有 15.5.7)开始,C++ 编译器接受了这个/std:c++17
标志。我试图通过将这些行之一添加到.pro
文件来传递它:
他们都没有帮助......
这是编译器运行的详细构建命令:
我错过了什么?什么可以解决问题?谢谢!
c++ - 使用 MinGW 构建 Qt 项目以使用 WinRT API
我想从我使用 Qt 5.9.2 MinGW 32bit 创建的应用程序中使用通过 WinRT API 可用的库(如这些)。我有 Windows 10 操作系统。
现在,我已经设置了一个套件,如下所示。
然后,在.pro
文件中,我添加了:
我cppwinrt
从GitHub 代表和 Windows 10 SDK 从Windows Dev Center获得。
我只是添加了一些行main.cpp
来测试正确的编译:
运行qmake
and后build
,我收到以下错误:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_stdio_config.h:31: 错误:#error 不支持的架构 #error 不支持的架构 ^
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.12.25827\include\new:23: 错误:#error Unsupported architecture #error Unsupported architecture ^
C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\winnt.h:1008: error: #error 必须定义目标架构。#error 必须定义目标架构。^
...以及来自文件的其他内容:corecrt_stdio_config.h
, winnt.h
, oaidl.h
, DirectXMath.h
,vcruntime.h
和yvals.h
.
这是编译器运行的详细构建命令:
我错过了什么?什么可以解决问题?谢谢!
win2d - Win2D 在 C++/WinRT 中是否可用?
我需要在我的 cppwinrt 项目中使用 win2D。使用 Win2D 示例文件作为模型,我试图模仿它的设置,从该项目中放入 win2d 的包文件,复制自定义构建步骤,但我无法编译它。我记得有人谈到 Win2D 很快就会添加到标准 cppwinrt 头文件中,以便可以像其他这些美妙的 cppwinrt 接口一样访问它。这是可能很快发生的事情吗?或者是否有人对在当前 Visual Studio 2017 环境中使用 Win2D 有一些非常具体的说明?我在 Insider 预览计划中,但没有看到任何内容。谢谢。
c++-winrt - 如何在 C++/winrt 中调用 GUI 线程上的方法
使用 C++/winrt 响应文本框中的事件时,我需要使用 ScrollViewer.ChangeView()。麻烦的是,调用执行时什么也没有发生,我希望那是因为那一刻代码在错误的线程中;我已阅读这是导致 ChangeView() 缺少可见结果的原因。看来正确的做法是使用 CoreDispatcher.RunAsync 来更新 UI 线程上的滚动条。但是,此示例代码仅在 C# 和托管 C++ 中提供,要弄清楚这在普通 C++ 中的外观是一件棘手的事情。无论如何,我不明白。有没有人有在 C++/winrt 中调用 UI 线程上的方法的正确方法的示例?谢谢。
[更新:] 我找到了另一种似乎可行的方法,我将在这里展示,尽管我仍然对上述问题的答案感兴趣。另一种方法是创建一个 IAsyncOperation,归结为:
c++-winrt - Example code for use of DispatcherTime in c++/winrt?
Does anyone know of example code to illustrate the creation of a periodic timer, say with DispatcherTimer, in c++/winrt? The examples in the docs are managed C++ and I have not been able to successfully convert them for use with c++/winrt. Thanks... [Update: in response to popular demand, let me show my own attempts to translate the C++/CX code. Here is the sample code from the DispatcherTimer documentation:
//Now, for translating to C++/winrt:
So, if anyone has a way to implement that tick handler in cppwinrt I would love to see it. Thanks.
c++-winrt - 在 C++/winrt 中注册窗口关闭事件
如何在 C++/winrt 中捕获并可能取消窗口关闭事件?我见过对此的参考:
(在拼写为“_e.Cancel”的引用示例中,但我假设这是一个错字)。在 C++/winrt 中,我希望上面的内容可以转换成这样的:
但是 _allowClose 没有定义,.Cancel 不是 args 的成员(必须指定 args 类型),而且最重要的是我不知道如何注册这个事件处理程序。这个应用程序中当然只有一个窗口,但我需要拦截任何通过 cntl-Q 或关闭框关闭该窗口的尝试,以便在程序中执行某些操作并可选择取消关闭。谢谢。[更新] 被告知 winrt 中没有 WindowClosing 事件,很遗憾。根据文档,有一个 WindowClosed 事件(以下是剪切和粘贴):
但是我不知道如何注册这个活动。到目前为止,更好的是在关闭发生之前让我知道的事件,允许取消 - 但即使这么多也会有所帮助。知道窗口,唯一的窗口,正在关闭似乎至关重要。
uwp - 有没有办法绕过对某些 API 的 UWP 限制?
我已经尝试过创建一个 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 功能。
oauth - 如何确定过期的访问令牌?
我正在与Microsoft Health Cloud API交互,并已成功请求访问令牌和刷新令牌。与 RESTful API 的通信按预期工作,尽管我很难弄清楚如何可靠地确定过期的访问令牌。
我有以下代码:
尽管它似乎有效,但由于很多原因,它感觉不对。这不仅仅是魔法值,而且事实上,这个特定的错误代码可以用于其他错误模式。
是否有更可靠的方法来确定访问令牌是否已过期?
注意:我明白,我可以使用过期间隔,并检查系统时间。我宁愿不走这条路,因为它也不完全可靠,并且为跨设备漫游该信息引入了额外的复杂性。
visual-c++ - 将 SDK 与 Windows 10 更新同步并将 WinRT 与标准 C++ 结合使用
我已经开始使用 Visual Studio 2017 社区版试验 C++/WinRT。我现在有一个环境,我可以在其中构建示例应用程序的调试版本并运行它。我不得不:
- 下载并安装最新的 Windows 10 SDK
- 使用 C++/WinRT 包和模板更新 Visual Studio 2017
- 将 Windows 10 操作系统更新到最新版本,版本 1803
文档和网页描述了 Visual Studio 的 C++/WinRT 包更新,并尝试编译示例给我一个错误,指示下载和安装最新的 Windows 10 SDK。
当我尝试实际运行示例应用程序的调试版本时,我发现我还需要 Windows 10 Build 1803。
Windows 10 Build 1803 是使用标准 C++ 和 C++/WinRT 运行应用程序的要求,还是我使用调试版本的经验?
这是否意味着尚未将其 Windows 10 安装升级到至少 Windows 10 Build 1803 的人将无法运行使用 C++/WinRT 开发的应用程序?
企业或商业客户是否有可能在使用自己的特定更新集从自己的服务器进行企业特定升级时选择消除必要的 C++/WinRT 组件,从而使 C++/WinRT 应用程序无法在他们的环境?
是否有某种封装以便可以将必要的 C++/WinRT 组件包含在应用程序中?
附录:两个测试应用程序
我从头开始重试了我使用过的两个测试应用程序。此重试工作是在对安装最新的 Windows 10 SDK 10.0.17134、安装 C++/WinRT Visual Studio 扩展并将我的 PC 更新到 Windows 10 1803 进行修改之后进行的。
我尝试的第一个 C++/WinRT 应用程序是来自 Kenny Kerr 的文章C++ - 介绍 C++/WinRT的控制台应用程序,其中包含以下示例应用程序:
我终于梳理出创建、编译和运行这个测试源的过程如下。从打开 Visual Studio 2017 社区版开始,我做了以下工作:
- 文件 -> 新建 -> 项目并使用 Windows 桌面、Windows 控制台应用程序模板
- 保留但替换用上述源
#include "stdafx.h"
生成的模板main()
- 在解决方案资源管理器中右键单击解决方案,选择属性,打开 C/C++ -> 语言并将“C++ 语言标准”更改为“ISO C++17 标准 (/std:c++17)”
“配置属性”->“常规”中的“Windows SDK 版本”设置为 10.0.17134.0。
构建失败,编译错误为error C3861: 'initialize': identifier not found
. 进一步搜索找到了这篇文章,Windows SDK 中的 cppwinrt.exe,其中包含一个示例应用程序,该示例应用程序使用该示例应用程序init_apartment();
而不是initialize();
这样更改我的示例应用程序编译并运行,生成一个文章列表作为输出。
这篇 Microsoft 文档文章C++/WinRT 入门,日期为 2018 年 5 月 7 日,有一个控制台示例使用init_apartment();
而不是initialize()
. 该示例也是一个 Syndication Feed,但指向不同的 URL。
第二个测试应用程序使用了“Windows Universal”->“Blank App (C++/WinRT)”的C++/WinRT模板,生成了一个编译运行的示例应用程序。在“属性”->“常规”对话框中,“目标平台版本”设置为 10.0.17134.0,“目标平台最小值”设置为 10.0.15063.0。
visual-studio - 错误:此模板试图加载组件程序集 'Microsoft.VisualStudio.Universal.TemplateWizards, Version=15.0.0.0
我在 Windows 10 Home 版本 10.0.16299 32 位、Windows SDK 版本 10.0.17134.12 和 C++/WinRT 版本 1.0.180505.2 上使用 Visual Studio Community 2017 版本 15.7.1。当我尝试使用任何 C++/WinRT 模板创建新项目时,我收到以下错误消息:
Error: this template attempted to load component assembly
'Microsoft.VisualStudio.Universal.TemplateWizards, Version=15.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. For more
information on this problem and how to enable this template,
please see documentation on Customizing Project Templates.
这个问题有简单的解决方法吗?