问题标签 [winrt-component]
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.
windows-runtime - 如何摆脱cppwinrt头文件中过多的参数警告C4002
在以下情况下,我收到太多参数警告。我可以将其报告为错误,但 GitHub 中的存储库已关闭,并且 cpp-winrt 项目现在归 Microsoft 所有。
情况 使用 cpp-winrt 项目模板新建一个 windows 运行时组件项目。在项目设置的c++->预处理器部分的“预处理器定义”中添加宏“WINAPI_PARTITION_DESKTOP”。编译项目。
您将收到以下警告:
...\生成的文件\winrt\impl\windows.ui.xaml.media.animation.0.h(4510):警告 C4002:函数式宏调用“GetCurrentTime”的参数过多
与上述消息对应的行是“virtual int32_t __stdcall GetCurrentTime(int64_t*) noexcept = 0;”
可能名称 GetCurrentTime 可能与 Windows 旧 API 名称冲突!
visual-c++ - 如何在 cpp-winrt idl 文件和普通/标准 cpp 类中使用相同的命名空间名称?
该场景是新的,我相信它可能是 cpp-winrt 模块或 vc 编译器中的错误。
问题
1. 使用通用 windows 的 cpp-winrt 模板创建一个“windows 运行时组件”。
2. 记下 idl 文件中定义的命名空间名称。默认情况下,idl 文件被命名为 class.idl。
3. 使用类向导将“新标准 cpp 类”添加到项目中。
4. 将新类放在 idl 文件中定义的相同命名空间名称下。
5. 构建项目。
一个。构建应该成功。
6.在运行时实现类中使用标准的cpp类。
7. 现在再次尝试构建项目。
一个。这次构建将失败。
原因
1. cppwinrt.exe 从 idl 文件生成源文件。
2.运行时实现类命名空间以“winrt”为前缀。
3.标准的cpp类不以命名空间“winrt”为前缀。
4. vc 编译器期望标准 cpp 类命名空间从“winrt”开始
5.否则即使您尝试使用完全限定的命名空间名称,名称解析也会失败。
示例运行时 idl 文件
示例标准 cpp 文件
示例运行时类实现
NMLevel1::NMLevel2::StdCPPClass stdcls; 不允许在命名空间前加上 winrt 前缀。
这是无法克服的错误还是设计限制?或如何在 idl 和 cpp 文件中使用相同的命名空间“NMLevel1::NMLevel2”?
javascript - 无法在 JavaScript 中为 Windows.Web.Http.HttpClient 添加超时
我很难弄清楚如何使用通过 WinRT 提供的 Windows.Web.HttpClient 设置请求超时。我正在开发的应用程序是一个 JavaScript 类型的通用 Windows 应用程序。“客户端”,JavaScript 可以访问使用在 C# 中编程时通常会使用的各种命名空间。这些命名空间的成员可以像这样从 window 对象访问:
我将在下面发布的代码的目标是在应用程序重定向到 URL 之前对 URL 进行简单的可达性检查,以防有人想知道为什么我没有使用 JavaScript 中更标准的方法(例如:XMLHttpRequest ),这是因为 CORS 有时会失败这些请求。由于我在一家大公司工作,因此要求在任何地方添加适当的 access-control-allow-origin 标头并不容易,除此之外,我们还有测试人员正在侧向加载设备、运行代理等......
也就是说,尽管我能够找到与手头任务相关的文档,但这些示例都在 C# 中,而且我注意到并非 JavaScript 方面的所有内容都与该文档完全一致。
Stack Overflow 用户在这里提出了一个非常相似的问题,并且接受的解决方案是使用 CancellationTokenSource。然而,据我所知,这个问题的 C# 解决方案不适用于 JavaScript 方面,但我确实想出了一个接近解决方案,我可以使用 setTimeout 取消任务。请注意,为了便于阅读,我在这里编辑了一些代码行。
上面的代码本身似乎运行良好,但后来我注意到传递给回调函数(arg 命名响应)的参数不是我所期望的。我期望至少类似于 XHR 响应的东西,但我得到的似乎是任务的成功或错误响应。问题是,我确实需要获取状态代码和失败原因,以便为我们的报告记录它(该代码未说明)。
这是我的下一次(部分)尝试,显然,如果我等待响应,那么我实际上确实得到了一个与 XHR 响应足够相似的对象以用于该目的。但是,由于我在这里等待任务,所以我没有将它存储在变量中,以便在超时后可以取消它。
总之,我不认为设置超时阈值这样简单的事情会如此痛苦,但我一直无法找到这样做的方法。
uwp - C++/WinRT 无法从 'winrt::com_ptr 转换参数 1' 到 'winrt::array_view
我正在使用 C++/WinRT 为 uwp 创建一个 winrt 组件。我定义了一个类似自爆的运行时类,
然后cppwinrt编译器生成这样的代码,
winrt 组件已编译,但当另一个 UWP 应用(使用 C++/WinRT 编写)引用该组件时,该应用无法编译。
错误就像自爆,
让我感到困惑的是,可以编译一个 uwp 应用程序(用 C# 编写)。
简而言之,我只想替换 C++/CX 中的 Array。我找到了这个,这不是我想要的。我想知道的是如何在 MIDL 3.0 中定义字节数组的属性。我已经像上面那样尝试过,但似乎我不能像上面那样做。
那么有人可以帮我解决这个问题吗?
windows-runtime - 进程外 WinRT 组件 + runFullTrust?
我正在开发一个必须与后台进程进行广泛通信的 UWP 应用 (C++/WinRT)。不幸的是,后台进程必须保持完全信任的“Win32”进程。两者都打包在一个 MSIX 中。
出于性能和可编程性的原因,我的首选是将后台进程转换为进程外 WinRT 组件。应用服务是一种可能性,但并不理想。
我找到了许多通过 WRL 创建 OOP WinRT 组件的代码示例。但是,激活是通过 CoreApplication::RunWithActivationFactories() 执行的,(据我所知)需要一个 AppContainer。
我知道我可以在 Win32 进程中使用WinRT 组件。我可以创建一个吗?如果是这样,在 C++/WinRT 中激活会是什么样子?
uwp - 如何通过 c++/winrt 将模板化的 C++ API 投影到 WinRT?
我有一个预先存在的本机 C++ 库,我试图通过 C++/WinRT 运行时组件投影 API 来向 UWP 应用程序公开。我很难理解如何公开模板化函数。
对于以下示例 C++ 类:
这个例子显然很愚蠢;实际上,模板化工厂正在创建另一个特定于库的类型(不是std::vector
),并且它是 ExampleClass 的成员是有原因的。
我希望create_a_vector
通过在我的 IDL 和运行时组件中专门声明和实现它们来公开专业化的子集。例如,以下 IDL 将是理想的:
然后在每个版本的实现(在 C++/WinRT 中)中,CreateAVector
我会根据需要在 WinRT 和 C++ 类型之间进行转换,并调用create_a_vector
.
然后,使用 C# 代码可能看起来像这样:
目标 C# 示例代码中使用的语法似乎是合法的,实际上许多 WinRT API 都是模板化的(IVector<T>
例如)。但是,我上面的 MIDL 语法无效,并且我没有找到任何关于如何通过 MIDL 和/或 WinRT/C++ 创建模板化 WinRT API 表面的文档。
这种将原生 C++ 库投影到 WinRT 中的方法是否可行?我是在叫错树了吗?
rust - 你如何使用 Rust 导航 winrt-rs
我正在尝试从以下位置使用 winrt-rs:
[ https://github.com/microsoft/winrt-rs][1]
但是,我没有使用 winrt 的经验,除了示例(扫雷)之外,没有太多信息(我已经能够找到)。所以,我想看看我如何才能正确地导航这个。我下载了存储库,但它似乎并没有真正显示模块以及它们是如何编写的。另外,在写作时,我似乎没有得到智能感知或文档示例。
所以,作为一个例子,我正在尝试做一个 MessageDialog。我发现以下行有效:
有了这一行,编译成功。但是,我似乎无法找到如何创建一个新对话框。
这个错误说,
^^^^^^^^^^^^^ 你的意思是
MessageDialog { /* fields */ }
?
所以,我尝试使用“新”:
但这给出了另一个错误:
^^^ 函数或相关项目未在
windows::ui::popups::MessageDialog
正如问题所暗示的,这里真正的问题不是如何创建 MessageDialog。相反,我想知道在哪里可以找到 winrt 模块的信息。
c++ - 在 C++/WinRT 组件中对 COM-lite 对象使用智能指针有什么建议吗?
C++/WinRT 提供了 3 种类型的智能指针用于 COM 对象 - Microsoft::WRL::ComPtr
、com_ptr
和基于 ATL 的CComPtr
.
在我的例子中,它是一个 COM-lite 对象,这意味着它不是进程内或进程外 COM 对象,它是作为 C++ 对象创建的。
在这种情况下,我应该在 C++/WinRT 组件中使用哪个智能指针?
cordova - 如何在 Javascript UWP 应用程序中迭代 IMapView WinRT 对象?
我需要迭代 WinRT 类型的对象以取消注册我已成功注册的 UWP 后台任务。
我可以在 javascript 中访问此对象 BackgroundTaskRegistration.AllTasks,但我收到了一个 IMapView<Guid, BackgroundTask> 类型的 WinRT 集合,我无法对其进行迭代或访问。
注意:该解决方案是使用 Cordova 设置的,但我从 VS2017 手动连接了 WinRT。
任何想法表示赞赏!
c# - 我可以在 Xbox 游戏中设置等待用户云数据同步完成的保持点吗?
是否可以将启动保留编程到 Xbox 游戏包中,等待用户的云保存在继续之前同步?我有一个 HTML5 游戏包,我需要从 Xbox Live 加载保存数据,然后从本地存储(以 JSON 格式)读取以在启动时填充加载屏幕,并且我还必须考虑任何错误消息用户可能必须做出回应。同步完成后游戏本身就会启动(但显然要等到法律问题得到处理后,所以徽标飞溅、引擎品牌、扣押咨询以及可能的 FBI 和 ESRB 通知也必须考虑在内) . 如果它也有助于调查,那么当有一个活动会话时,数据会被正确保存,我可以成功地将它复制到本地应用程序存储中。另一方面,Xbox Live 副本,
我也没有在游戏文件中保存那么多数据——只有五个保存槽,不包括全局配置和用户设置。基本上,我试图将每个用户的存储空间保持在创建者项目的 64MB 上限以下(更不用说我最初对 ID@Xbox 的请求没有成功),我希望在我什至之前实现这一点敢重新提交。考虑到我通过 Bing 和 Google 请求收到的所有相互冲突的信息,这当然是有可能的。
我最接近的是以下代码,它主要基于 Microsoft Docs 示例。第一个块应该加载 Xbox 数据并将其复制到磁盘,为此我首先需要延迟:
这就是 HTML5 部分调用时应该读取数据的内容:
这是 WinRT 端的保存代码:
而且我最近刚刚将用户检测代码添加到主项目中。