问题标签 [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.

0 投票
1 回答
531 浏览

c++ - 带有 C++/WinRT 的 XAML 的 Rectangle 的鼠标指针事件退出处理程序的未解析外部

我正在开发一个简单的 C++/WinRT UWP 应用程序,以了解如何为这些事件的实际处理程序链接 XAML 事件和 C++/WinRT 源代码。

我有一个包含蓝色矩形的简单网格的 XAML 源。在蓝色矩形旁边是一个按钮,可从早期工作中单击以在单击该按钮时触发处理程序。那工作得很好。

现在我想处理鼠标指针事件。但是,C++/WinRT 源代码生成会生成链接错误。我假设这意味着源代码中的处理程序没有正确的接口。

然而,到目前为止,我一直无法预测正确的签名,而且我已经没有山羊来获取必要的内脏了。

有人能告诉我指针事件的事件处理程序应该是什么吗?

我想为我目前正在探索的以下指针事件提供必要的接口:

  • 指针已退出
  • 指针释放
  • 指针按下

MainPage.h 文件包含以下声明:

MainPage.cpp 文件包含以下源:

MainPage.xaml 文件包含以下源:

链接错误fatal error LNK1120: 1 unresolved externals具有以下描述:

未解析的外部符号“公共:__thiscall winrt::Windows::UI::Xaml::Input::PointerEventHandler::PointerEventHandler(struct winrt::BlankAppTouch1::implementation::MainPage ,void (__thiscall winrt::BlankAppTouch1::implementation: :主页::)(struct winrt::Windows::Foundation::IInspectable const &,struct winrt::Windows::UI::Xaml::RoutedEventArgs const &))" (??$?0UMainPage@implementation@BlankAppTouch1@winrt@@P80123 @AEXABUIInspectable@Foundation@Windows@3@ABURoutedEventArgs@Xaml@UI@63@@Z@PointerEventHandler@Input@Xaml@UI@Windows@winrt@@QAE@PAUMainPage@implementation@BlankAppTouch1@5@P86785@AEXABUIInspectable@Foundation@45 @ABURoutedEventArgs@2345@@Z@Z) 在函数“public: void __thiscall winrt::BlankAppTouch1::implementation::MainPageT::Connect(int,struct winrt::Windows::Foundation::IInspectable const &)”中引用( ?Connect@?$MainPageT@UMainPage@implementation@BlankAppTouch1@winrt@@$$V@implementation@BlankAppTouch1@winrt@@QAEXHABUIInspectable@Foundation@Windows@4@@Z)

如果我PointerExited="PointerExitedHandler"从 XAML 中删除描述Rectangle.

具有蓝色矩形且 XAML 中没有 PointerExited 的工作应用程序的屏幕截图

附录 A:更改和错误

从 XAML 中删除该子句后,我尝试将指针退出处理程序的处理程序放入矩形对象本身。重新编译,我得到了似乎是相同的未解决的外部符号链接错误。

如果我PointerExited()通过将字母添加x到处理程序函数的名称(如 中touchRectangle().PointerExited({ this, &MainPage::PointerExitedHandlerx });)来修改方法中指定的处理程序的名称,我会看到编译器错误,表明标识符PointerExitedHandlerx不存在,正如预期的那样。

附录 B:PointerEventHandler 结构

PointerEventHandlerfrom的定义Windows.UI.Input.2.h是:

PointerRoutedEventArgs定义为:

文档链接

UIElement.PointerExited 事件

如何使用 cppwinrt 为 OnPointerEntered 声明处理程序?

0 投票
0 回答
153 浏览

uwp - GetThumbnailsAsync 的内存问题

最小示例 [C++/WinRT]:

问题:当我运行此代码时,内存使用量迅速增加,最终程序失败。理想情况下,我会假设如果我得到一个操作的结果,该操作将停止消耗内存,但在这种情况下GetThumbnailAsync会继续使用内存。关闭操作或关闭操作的结果无济于事。如何使GetThumbnailAsync操作完成后释放所有分配的内存?

平台: Microsoft Windows 10 Insider Preview(内部版本 17682)

0 投票
2 回答
1374 浏览

c++-winrt - C++/WinRT 是否提供帮助函数来从字符串文字构造 GUID?

与 C++/CX 不同,C++/WinRT 中似乎没有 GUID 的包装类型。它只是按原样使用普通的 C GUID 结构。因此,构造初始化 GUID 的唯一方法是使用聚合初始化语法,例如

虽然这有效(并且 Visual Studio 中的创建 GUID工具甚至可以设置为为您生成初始化程序代码),但它只是乏味,远非可读,并且无论我是否引入任何字节序问题,总是让我摸不着头脑。

我更愿意写(使用假设make_guid函数)

我知道 C++/WinRT 在constexpr从完全限定的类型名称计算 GUID 方面做了很多魔术,所以大概可以实现零开销的编译时间make_guid函数。浏览文档winrt/base.h,我没有发现任何立即适用的内容。

C++/WinRT 是否提供帮助函数以在编译时从字符串文字构造 GUID?如果没有,我们/我可以拥有一个吗?

0 投票
1 回答
169 浏览

c++-winrt - 无法安装 Microsoft.Toolkit.Uwp.UI.Controls 3.0.0

使用 NuGet 包管理器,我收到以下错误消息:

该应用程序是一个空白应用程序 (C++/winRT)。Visual Studio 15.8.0 预览版 4.0.(10.0.17134.0, 10.0.17704.0)

0 投票
1 回答
847 浏览

c++ - 使用 UWP 和 C++/WinRT 应用处理从 ListView 拖放到 ListView 的拖放事件

我正在开发一个在 Windows 10 下用 C++/WinRT 编写的简单 UWP 应用程序,其中包含两个ListView控件。此应用程序的目标是学习如何从一个ListView控件中选择一个项目,将其拖动到另一个ListView控件,然后放下该项目,以便将其从源ListView控件复制到目标ListView控件。

ListView到目前为止,我发现的所有示例都使用 C#,其中一些使用 C++/CX 而不是 C++/WinRT 和本机 C++,但是我已经设法坚持到从源代码中选择项目的基本机制可以正常工作的地步拖放到目的地ListView。但是,当尝试从 drop 事件中获取信息以更新目标ListView时,我遇到了异常。

问题:我需要进行哪些更改才能将源ListView控件中的选定文本拖放到目标ListView控件上,然后将文本添加到目标ListView控件中?

Visual Studio 2017 的输出窗口显示以下文本,我将其解释为错误地址异常:

当函数中的以下源代码行(void MainPage::OnListViewDrop()MainPage.cpp 源文件中的最后一个函数)执行时引发异常:

附加信息 A:使用调试器,我发现与异常相关的错误消息意味着方法提供的数据中存在错误OnListViewDragItemsStarting()。异常错误消息的文本是:

我还在 Visual Studio 首次引发和捕获异常的站点上发现,停止应用程序base.h(来自 C++/WinRT 模板),错误文本0x8004006a : Invalid clipboard format表明我对数据格式缺乏一致意见拖动开始创建并且拖放尝试消耗。

源代码概述

我在 MainPage.xml、MainPage.cpp、MainPage.h 和 pch.h 区域中修改了标准 C++/WinRT 应用程序模板。我还为一个新类 DataSource 添加了类文件,它使用 astd::vector<>来包含一些测试数据。此内存驻留数据在App构造函数中使用一些虚拟数据进行初始化:

首先,我必须在 pch.h 文件中添加一行以提供拖放模板:

XAML 源文件包含两个ListView控件的源以及一个TextBlock显示源中所选项目的完整描述的控件ListView

的类声明DataSource很简单。类定义如下:

和 的初始化vector,这是App在应用程序启动时的构造时完成的:

XAML 页面背后的 MainPage.cpp 源代码是:

在开始拖动之前在源中选择项目的应用程序的屏幕截图ListView如下所示。源ListView控件在左侧,目标ListView控件在右侧。 UWP 应用程序的屏幕截图,其中包含两个用于拖放探索的 ListView 控件

附录:参考资料和文档

Microsoft Docs - Windows.ApplicationModel.DataTransfer 命名空间

Microsoft Docs - DragItemsStartingEventArgs 类,其中包含指向此示例项目的链接,该示例项目看起来正在使用 C++/CX 将示例拖放到 GitHub 上,其中包含Windows-universal-samples/Samples/XamlDragAndDrop/cpp/Scenario1_ListView.xaml.cpp,它有一个有用的例子。

0 投票
2 回答
458 浏览

c++-winrt - 窗口化的 c++-winrt main() 方法应该有什么签名?

我有一个带有 main() 的 c++-winrt 应用程序,如下所示:

CWindowsPlatformApp 继承自 winrt::Windows::UI::Xaml::ApplicationT。但是,在编译时,我得到一个像这样的链接器错误:

main 的 CX 签名仍然有效,但我目前正在将所有 CX 代码转换为 c++-winrt。

如果我将子系统更改为控制台应用程序,它也会正确链接。

但是无论如何我可以用 c++-winrt 指定一个 windows app-main() 吗?

0 投票
0 回答
511 浏览

visual-studio-2017 - 如何打包 C++/WinRT 可执行文件进行安装?

我构建了一个 C++/WinRT 应用程序,在尝试启动 Release 构建可执行文件时出现错误

“.. MSVCP140_APP.DLL 未找到”后跟“.. VCRUNTIME140_APP.DLL 未找到”。

显然,运行时安装在我的开发机器上,我可以使用 Ctrl+F5 从 Visual Studio 启动它。

我还应该做些什么才能使这个二进制文件成为可以部署的包?它是一个独立的可执行文件,没有其他外部库依赖项。

我尝试浏览文档并搜索网络,但找不到任何线索。我怀疑 Windows 10 的可执行打包已经改变,因为我在 Win 7 天的早期离开它后又回到了 Windows 开发。

0 投票
1 回答
323 浏览

midl - 反转 MIDL 3.0 数组参数的 C++/WinRT ABI 参数顺序?

我有一个正在尝试使用 MIDL 3.0 定义的现有接口。它的一种方法具有此 C++ 签名:

我尝试将其翻译为 IDL,如下所示:

但是,生成的 C++/WinRT ABI 具有相反顺序的参数:

考虑到这是推荐的顺序,这确实有意义。不幸的是,我没有能力改变现有接口的参数顺序。相反,我认为我可以使用“经典”风格来解决它:

但是,这被 MIDL 编译器拒绝:

如何在 IDL 中编写此接口以产生正确的 ABI?

0 投票
0 回答
243 浏览

sta - 如何从 C++ winRT 中的 FileOpenPicker 窗口获取所选文件?

我已经能够提出以下“几乎可以工作”的 C++/winRT 代码。我使用返回 IAsyncOperation 的方法创建了一个类,以便我可以使用 co_await 关键字;该方法如下所示:

现在我从按钮的单击处理程序中调用此方法:

这可以编译,但是当 get() 方法被调用时,它会触发这个断言:

所以它抱怨公寓是单线程的!然而 winrt::init_apartment() 是用多线程调用的!

所以这就是我卡住的地方!

谁能给我一些见解?我正在使用 Visual Studio 2017 版本 15.7.5。

谢谢,胡安

0 投票
1 回答
122 浏览

c++-winrt - 如何从 MainPage 的 cppwinrt 模板项目中的 App 类调用函数

我在 cppWinRT 空白应用程序的 Visual Studio 模板项目中工作。

我想做的是MainPage从类OnLaunched内的函数中调用定义的函数App

到目前为止,我的理论是我需要的是这些方面的东西:

但是我不确定这是否是正确的方法。