问题标签 [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 投票
0 回答
163 浏览

uwp - IFrameworkView IFrameworkViewSource 和 OnPointerPressed 是什么关系

我试图弄清楚上面提到的 2 个接口中的哪一个是由 OnPointerPressed 实现的。

OnPointerPressedControl课堂的一部分

而且我看不出Control, App,IFrameworkViewSource或之间的关系IFrameworkView

由于 WinRT UWP 使用大量接口,如果示例代码在添加功能时指示正在实现哪个接口,它可能会有所帮助。如果这是样本的重点,将严重帮助学习曲线。否则,您必须深入研究接口才能理解示例代码。

0 投票
0 回答
114 浏览

uwp - 是否可以在 Windows 组合 API 中获取给定合成器的渲染设备?

我想知道是否有可能以某种方式为给定的 xaml 控件的合成器调用此 API 函数: https ://msdn.microsoft.com/en-ca/library/windows/apps/mt620066?f=255&MSPPError=-2147217396

我在想的是这些方面的东西:

除了显然这不起作用,因为没有GetGraphicsDevice可用的功能,只有CreateGraphicsDevice.

0 投票
1 回答
231 浏览

c++-winrt - C++/winRT CreateFolderAsync - 如何检查现有文件夹?

我正在尝试更新文件夹中的文件。首先,我需要检查文件夹是否存在,如果不存在,则创建一个,然后在该文件夹中创建一个空文件。如果文件夹不存在,则使用 FailIfExists 或 OpenIfExists 的 CreationCollisionOption 的 try/catch 不起作用。

其他选项:GenerateUniqueName 和 ReplaceExisting 不合适。code:............ //获取存储文件夹 StorageFolder _storageFolder = ApplicationData::Current().LocalFolder();

0 投票
1 回答
575 浏览

uwp - C++Winrt winmd 在 C# UWP 项目中可见,但在 C++Winrt 项目中不可见

我在 c++/winrt WRC 项目的 IDL 文件中有一些结构和枚举。

这样数据结构就可以在 C++ 和 C# 之间共享。

将 Winmd 添加到 UWP C# 项目并且类型可见 ok

然后尝试winrt项目

  1. Winrt CoreApp 项目在添加 winmd 后构建良好,但从未看到类型。

  2. 由于我的类型,Winrt Blank Project 无法在某些 xaml 相关文件中编译,这仅仅是添加 winmd 的结果。

但是 C# UWP 项目没有这样的问题。在 C# uwp 中,我可以看到我的类型并毫无问题地使用它。

干杯

0 投票
1 回答
309 浏览

c++-winrt - 将基于示例的旧 C++ Winrt dll 项目转换为 Windows 运行时组件项目

在项目模板可用之前,我有从 C++ WInrt Sample 创建的旧 C++ Winrt dll 项目。

如何在不从新项目开始的情况下将其更新为 Winrt 运行时组件项目模板。

我检查了项目设置,找不到任何使两个项目不同的决定性内容,但是新样式项目与运行时组件一起工作得更好,特别是当您尝试访问 Idl 生成的头文件时,您不会收到错误说 Winrt 的版本不同。

干杯

0 投票
2 回答
527 浏览

xaml - 如何在自己的线程中从核心应用程序启动 UWP (Xaml) 应用程序?

我希望 UWP xaml 应用程序(称为my_xaml_app)和 UWP Core 应用程序(称为my_core_app)在各自线程中的同一程序中运行。

到目前为止,我已经尝试了以下方法:

我没有包括如何实例化my_core_appmy_xaml_app实例化的详细信息,但您可以假设它们可以正常工作,因为如果我从主线程单独启动它们,它们会正确启动。

在上面的代码中,my_xaml_app正确启动是因为它是从主线程调用的。但是my_core_app无法启动并报告以下错误:

WinRT originate error - 0x8001010E : 'The Application Object must initially be accessed from the multi-thread apartment.'.

The application called an interface that was marshalled for a different thread.

Microsoft C++ exception: winrt::hresult_wrong_thread at memory location 0x00000040E4EFE6E8

这是可能的吗?如果可以,怎么做?

0 投票
1 回答
1465 浏览

c# - 如何使用 Windows 运行时使用 C# 实现 C++ API?

我正在使用一个本机 C++ 应用程序,它有一个插件系统,它将LoadLibrary()/GetProcAddress()在 .dll 上调用函数。我想实现其中一个插件,并且在插件内部我想使用持久性框架将复杂的对象图保存/加载到磁盘。

似乎 Windows 上最受支持的 ORM 是 Entity Framework,这个页面说 Entity Framework Core 是最现代的风格。这个页面似乎说,为了使用 Entity Framework Core,你的数据模型必须用 C# 编写。

所以,听起来我必须从 C++ 调用 C#。幸运的是,Entity Framework Core 似乎支持通用 Windows 运行时,它应该使语言之间的调用变得容易。

该演示文稿似乎在说,从 C++ 与通用 Windows 运行时交互涉及创建 Windows 运行时组件,并且编译步骤可以从 Windows 运行时组件的.winmd文件中生成粘合代码。

因此,我可以制作一个包含两个项目的 Visual Studio 解决方案:一个外部“C++ Windows 桌面动态链接库”项目和一个内部“C# 通用 Windows 运行时组件”。

外部 C++ Windows 桌面动态链接库 内部 C# 通用 Windows 运行时组件

然后文档说“引用 Windows 运行时组件的 Windows 运行时元数据 (.winmd) 文件并构建。” 但是,当我在外部项目中添加引用时,尝试选择内部项目时出现错误,并且没有选项可以浏览以选择任意.winmd.

尝试添加对内部项目的引用时出错

即使我进入解决方案管理器并删除x86两个项目中的所有平台,也会出现此错误。

这是令人惊讶的,因为这篇 Windows 博客文章明确指出,本机代码应该能够通过添加对 的引用来调用 UWP 代码.winmd(尽管该文章使用的是较旧的 C++/CX 语法)。

如果我重新开始并使用“C++/WinRT Windows 运行时组件”而不是“C++ Windows 桌面动态链接库”项目,我仍然会遇到问题。

外部 C++/WinRT Windows 运行时组件

如果我这样做,我可以添加引用就好了。

成功参考

但是,当我尝试构建时,构建失败。

但是,我可以按照前面演示文稿中的步骤成功引用 Win2D,无论是在 C++/WinRT Windows 运行时项目(无需任何额外配置)和 ComponentC++ Windows 桌面动态链接库项目(并运行 cppwinrt 命令 -此答案中描述的线工具)。但是,这对我没有帮助——我不想引用 NuGet 包;我正在尝试在同一解决方案中引用不同的项目。

所以,毕竟,问题是:如何使用通用 Windows 运行时从 C++ 代码调用 C# 代码?

0 投票
1 回答
656 浏览

com - 释放COM接口的正确方法

我们有一些使用 COM 的遗留软件代码。我注意到在一个地方,我们在 IInspectable 指针上执行 queryInterface,但不打扰调用 release。

例如:

我在上面的代码中添加了 Release,如下所示:

但是我看到上面的代码在发布期间有时会在上面的函数中崩溃。我发布界面的方式有问题吗?我可以确认在 Release 语句之后,函数中的其他任何地方都没有使用 myInterface。

抱歉无法复制/粘贴实际代码,但上面的代码几乎总结了我正在调试的可疑代码。基本上我想知道的是,在上述情况下,我需要调用 Release() 吗?这是调用 Release() 的正确位置/方式吗?我是否需要添加任何其他安全检查?

0 投票
1 回答
1394 浏览

uwp - 我可以在非 UWP 应用程序中使用 C++/WinRT 吗?

我刚刚听说过 C++/WinRT,我很惊讶 C++ 有这个运行时,它添加了像 .NET 这样的高级类包装器。但我不想将我的应用程序作为 UWP 应用程序分发。我可以在非 UWP 应用程序中使用 C++/WinRT 吗?

0 投票
1 回答
250 浏览

windows-runtime - 是否可以在我自己的运行时类上实现 Windows 类型的 [exclusiveto] 接口?

我目前正在试验Holographic Remoting,并发现通常由 Windows 实现的 Holographic API 的各个部分来自其他地方。
例如,我HolographicSpace来自Microsoft.Perception.Simulation.dll上面链接的库。

我很想知道这是如何完成的,所以我创建了一个新的 C++/WinRT 组件并尝试从Windows.Graphics.Holographic.IHolographicSpace我的.idl文件中派生,但 MIDL 编译器会给我这个错误消息: error MIDL5051: [msg]use of the [exclusiveto] interface is not valid, use the runtimeclass for which this interface is exclusiveto instead.

很公平,否则有什么用[exclusiveto]

但是,问题仍然存在:外部组件如何假装它实现了 Windows 命名空间中的类型?我的意思是理论上我可以使用implements<>结构模板并在我的类型上实现所有必需的 COM 接口,但这与整个 MIDL 工具链不能很好地配合,因为我的代码部分是从中生成的。