问题标签 [cppwinrt]

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.

0 投票
1 回答
311 浏览

uwp - 在 C++/WinRT 中捕获 ContentDialog::ShowAsync 引发的异常

在 C++/CX 我有:

如果我创建并尝试显示两个对话框,结果 show() 被调用两次,ShowAsync 曾经抛出异常:

任何时候都只能打开一个 ContentDialog

我过去常常抓住并处理这个案子。当我将此代码转换为 C++/WinRT 时,根据我对转换规则的理解,有:

调用者看起来像这样:

我确实看到抛出了一个 Windows 异常,但不知何故它没有被我的代码捕获。

这是调用 ShowAsync() 的正确方法吗?我该如何处理这个异常?

0 投票
1 回答
240 浏览

uwp - 在从 c++/cx 移植到 c++/winrt 时实现 Windows 运行时接口以供本地使用时出错

更新

根据 Ryan Shepherd 的回复,我将代码更改为:

现在我得到一个错误:

没有构造函数实例 "winrt::implements<D, I, ...>::implements [with D=DerivedClass, I=BaseClass]" 匹配参数列表参数类型是:(winrt::Windows::UI:: Xaml::FrameworkElement)。

我确实定义了 BaseClass 构造函数,它将 &FrameworkElement 作为参数。所以我不确定我得到这个错误是什么。

原文

我在 C++/CX 中有这个:

当我尝试将其转换为 c++/winrt

这里有几个问题我想讨论和理解。如上所述,我收到以下错误:

1

BaseClass 不是 DerivedClass 类的非静态数据成员或基类

2

winrt::implements<DerivedClass, BaseClass> 的默认构造函数不能被引用——它是一个被删除的函数

3

没有合适的用户定义从 winrt::impl::com_ref<DerivedClass> 到 DerivedClass 的转换

4

不存在从 std::nullptr_t 转换为 DerivedClass 的合适构造函数

希望对这些错误有一些想法。

我知道我创建了一个 DerivedClass 对象

问题:

  1. 如何正确编写构造函数?
  2. 如何像在 C++/CX 中那样将参数传递给基类构造函数?
  3. 如何处理 from() 函数定义中的错误。
0 投票
0 回答
382 浏览

uwp - 使用 winrt::implements 和 winrt::make 时出错

在 C++/WinRT 中,我手工编写了一些这样的类(不使用 idls):

我创建这样的对象:

对于派生自 winrt:implements<BackgroundControllerX, GenericController> 的每个类,我都收到以下错误:

这是输出日志:

看起来类的编写方式和对象的创建方式可能有问题。但我无法弄清楚是什么或为什么。

0 投票
2 回答
173 浏览

uwp - 将 comptr 设置为 winrt::UserControl::Tag() 时出错

更新: 我使用 Richard 的建议来修复 Tag 的设置。但是我在使用 getter for Tag 并在其上使用.as / try_as运算符时遇到了一些问题。

这是我得到的错误:

控制器是构造函数:

DerivedController 构造为:

DerivedController 在 c++/cx 中曾经是这样的:

不知道我做错了什么,错误似乎与类的定义方式有关。将不胜感激任何想法!

原文: 在 C++/CX 中,我曾经能够做到:

当我尝试将其转换为 C++/WinRT 时,直接转换如下:

Controller 是一个手工编写的类(没有 idls),其定义如下所示:

但我在 (1) 处收到错误:

  1. 是否可以使用与 ABI 的某些互操作将 Com 指针设置为 Tag?
  2. 还有什么我想念的吗?
  3. 这是正确的方法吗?或者有没有办法解决它?
0 投票
2 回答
104 浏览

windows-runtime - 我应该如何在 cppwinrt 中将 AddHandler 与 Handler 对象一起使用?

在 C++/WinRT 反射中,API AddHandler定义为

UIElement::AddHandler(Windows::UI::Xaml::RoutedEvent const& routedEvent, Windows::foundation::IInspectable const& handler, bool handledEventsToo) const

但是处理程序似乎只继承自IUnknown. 例如,这是KeyEventHandler的声明:

struct KeyEventHandler : Windows::foundation::IUnknown

注册事件处理程序的解决方案是什么?

0 投票
2 回答
165 浏览

windows - bazel midl 规则生成的 c++ 头文件和 winmd 文件位于不同的文件夹中

当我使用 bazel 从 midl 文件生成 c++ 头源代码和 winmd 文件时,我发现 MyType.winmd 文件位于输出文件夹中,而 MyType.h 与源代码 MyType.idl 位于同一目录中。我想要的是我生成的头文件与 MyType.winmd 文件位于同一文件夹中。

我的类型.idl:

建造:

cmd.bzl:

midl.bat:

运行命令:

在此处生成 MyType.h:

生成的 MyType.winmd 在这里:

有什么我想念的吗?

0 投票
1 回答
192 浏览

visual-studio - C++/WinRT natvis 在全新安装中不起作用

我该如何解决这个问题?

我将这个问题中的 natvis 示例与 C++/WinRT 控制台模板结合起来,并成功地使 natvisMatrix2d可以工作,但不能用于Uri.

我不确定 cppwinrt 预计会生成哪些 natvis 文件(.natvis 或 .pdb)以及它们的位置。

下面是 Natvis 调试输出。它显示只有我的自定义 Natvis 文件 (\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis) 和系统范围的 Natvis 文件 (%VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers) 正在加载。

Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\atlmfc.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\concurrency.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\cpp_rest.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\ObjectiveC.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis。Natvis: 解析 natvis xml 文件: C: \Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\Windows.Data.Json.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\windows.devices.geolocation.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\windows.devices.sensors.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\windows.media.natvis。Natvis:解析 natvis xml 文件:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\windows.natvis。Natvis: 解析 natvis xml 文件: C: \Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\winrt.natvis。Natvis:解析 natvis xml 文件:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis。Natvis:忽略来自 ConsoleApplication2.pdb 的 NatvisFile.natvis;加载的项目中已存在同名文件。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(17,6):在类型上下文“Matrix2d”中成功解析表达式“0”。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(18,6):在类型上下文“Matrix2d”中成功解析表达式“i < m_numRows”。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1063,6):在类型上下文“std::vector<int,std::allocator >”中成功解析表达式“_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst”。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1062,6):成功解析表达式'_Mypair._Myval2._Mylast - _Mypair._Myval2。 _Myfirst' 在类型上下文 'std::vector<int,std::allocator >' 中。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1064,29):在类型上下文“std”中成功解析表达式“size()”: :vector<int,std::allocator >'。Natvis: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1066,52): 成功解析表达式' 类型上下文'std::vector<int,std::allocator >'中的容量()'。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1067,53):在类型上下文“std::vector”中成功解析表达式“_Mypair” <int,std::分配器>'。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1069,15):在类型上下文“std”中成功解析表达式“size()”: :vector<int,std::allocator >'。Natvis:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers\stl.natvis(1070,23):在类型上下文中成功解析表达式 '_Mypair._Myval2._Myfirst' std::vector<int,std::allocator >'。纳特维斯:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(19,23):在类型上下文 'Matrix2d' 中成功解析表达式 '&m_elements[i * m_numCols],[m_numCols]na'。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(19,8):在类型上下文“Matrix2d”中成功解析表达式“i”。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(20,12):在类型上下文 'Matrix2d' 中成功解析表达式 '++i'。成功解析类型上下文“Matrix2d”中的表达式“i”。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(20,12):在类型上下文“Matrix2d”中成功解析表达式“++i”。成功解析类型上下文“Matrix2d”中的表达式“i”。Natvis:C:\Users\a\source\repos\ConsoleApplication2\ConsoleApplication2\NatvisFile.natvis(20,12):在类型上下文“Matrix2d”中成功解析表达式“++i”。

这是全新安装的 Windows 10 和 VS19 (16.8.2)。

0 投票
1 回答
159 浏览

c++ - 从子类调用基类的受保护构造函数不起作用

我有一个需要子类化的 C++/WinRT 基类。我的问题是我无法从子类中调用基类的受保护构造函数。

该基类在 MIDL 中定义如下:

从中创建以下标头和实现:

子类的 MIDL、header 和 implementation 定义如下:

上面的例子编译。但是,如果我尝试从子类的初始化程序列表中调用受保护的基类构造函数,如下所示,我会收到编译器错误。

编译器错误如下: error C2614: 'winrt::My::Custom::WindowsRuntimeComponent::implementation::SubClass': illegal member initialization: 'BaseClass' is not a base or member

在 MIDL 和 I 的标头中都SubClass指定它继承自,BaseClass因此我不清楚为什么编译器会发出该错误。

我想我可以解决这个问题,但我很好奇这里到底发生了什么。有什么提示吗?

0 投票
1 回答
91 浏览

c++ - UWP 的 AvSetMmThreadCharacteristicsW

我正在使用 cpp/winrt 开发 WASAPI UWP 音频应用程序,该应用程序需要从输入中获取音频并在处理后将其发送到输出。

我想用 设置我的音频线程特性AvSetMmThreadCharacteristicsW(L"Pro Audio", &taskIndex),但我只是注意到这个功能(和大部分avrt.h)仅限于WINAPI_PARTITION_DESKTOPWINAPI_PARTITION_GAMES

我想我需要这个,因为当我的代码集成到我的 UWP 应用程序中时,音频输入充满了不连续性,我在使用avrtAPI 的测试代码中没有问题。

还有另一种方法来配置我的线程以进行音频处理吗?


编辑:这是我的测试程序https://github.com/loics2/test-wasapi。有趣的部分发生在AudioStream课堂上。我无法共享我的 UWP 应用,但我可以将这些类原样复制到 Windows 运行时组件中。


编辑 2:这是音频线程代码:

为了清楚起见,我删除了错误处理代码,其中大部分是:

0 投票
0 回答
54 浏览

uwp - 有没有办法在没有事件令牌的情况下删除 UWP 按钮单击处理程序?

在 UWP 应用程序中,有一个带有 Click handler( 1) 的 Button。我想删除这个处理程序并添加我自己的处理程序。好像有2种方式:

1,我添加了一个假的handler( 2),从返回的事件token中,我尝试猜测handler( 1)对应的事件token,最后发现很难猜。

2,还是有一些API可以盲目删除Click处理程序?

非常感谢!