问题标签 [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.
uwp - IFrameworkView IFrameworkViewSource 和 OnPointerPressed 是什么关系
我试图弄清楚上面提到的 2 个接口中的哪一个是由 OnPointerPressed 实现的。
OnPointerPressed
是Control
课堂的一部分
而且我看不出Control
, App
,IFrameworkViewSource
或之间的关系IFrameworkView
。
由于 WinRT UWP 使用大量接口,如果示例代码在添加功能时指示正在实现哪个接口,它可能会有所帮助。如果这是样本的重点,将严重帮助学习曲线。否则,您必须深入研究接口才能理解示例代码。
uwp - 是否可以在 Windows 组合 API 中获取给定合成器的渲染设备?
我想知道是否有可能以某种方式为给定的 xaml 控件的合成器调用此 API 函数: https ://msdn.microsoft.com/en-ca/library/windows/apps/mt620066?f=255&MSPPError=-2147217396
我在想的是这些方面的东西:
除了显然这不起作用,因为没有GetGraphicsDevice
可用的功能,只有CreateGraphicsDevice
.
c++-winrt - C++/winRT CreateFolderAsync - 如何检查现有文件夹?
我正在尝试更新文件夹中的文件。首先,我需要检查文件夹是否存在,如果不存在,则创建一个,然后在该文件夹中创建一个空文件。如果文件夹不存在,则使用 FailIfExists 或 OpenIfExists 的 CreationCollisionOption 的 try/catch 不起作用。
其他选项:GenerateUniqueName 和 ReplaceExisting 不合适。code:............ //获取存储文件夹 StorageFolder _storageFolder = ApplicationData::Current().LocalFolder();
uwp - C++Winrt winmd 在 C# UWP 项目中可见,但在 C++Winrt 项目中不可见
我在 c++/winrt WRC 项目的 IDL 文件中有一些结构和枚举。
这样数据结构就可以在 C++ 和 C# 之间共享。
将 Winmd 添加到 UWP C# 项目并且类型可见 ok
然后尝试winrt项目
Winrt CoreApp 项目在添加 winmd 后构建良好,但从未看到类型。
由于我的类型,Winrt Blank Project 无法在某些 xaml 相关文件中编译,这仅仅是添加 winmd 的结果。
但是 C# UWP 项目没有这样的问题。在 C# uwp 中,我可以看到我的类型并毫无问题地使用它。
干杯
c++-winrt - 将基于示例的旧 C++ Winrt dll 项目转换为 Windows 运行时组件项目
在项目模板可用之前,我有从 C++ WInrt Sample 创建的旧 C++ Winrt dll 项目。
如何在不从新项目开始的情况下将其更新为 Winrt 运行时组件项目模板。
我检查了项目设置,找不到任何使两个项目不同的决定性内容,但是新样式项目与运行时组件一起工作得更好,特别是当您尝试访问 Idl 生成的头文件时,您不会收到错误说 Winrt 的版本不同。
干杯
xaml - 如何在自己的线程中从核心应用程序启动 UWP (Xaml) 应用程序?
我希望 UWP xaml 应用程序(称为my_xaml_app
)和 UWP Core 应用程序(称为my_core_app
)在各自线程中的同一程序中运行。
到目前为止,我已经尝试了以下方法:
我没有包括如何实例化my_core_app
和my_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
这是可能的吗?如果可以,怎么做?
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 运行时组件”。
然后文档说“引用 Windows 运行时组件的 Windows 运行时元数据 (.winmd) 文件并构建。” 但是,当我在外部项目中添加引用时,尝试选择内部项目时出现错误,并且没有选项可以浏览以选择任意.winmd
.
即使我进入解决方案管理器并删除x86
两个项目中的所有平台,也会出现此错误。
这是令人惊讶的,因为这篇 Windows 博客文章明确指出,本机代码应该能够通过添加对 的引用来调用 UWP 代码.winmd
(尽管该文章使用的是较旧的 C++/CX 语法)。
如果我重新开始并使用“C++/WinRT Windows 运行时组件”而不是“C++ Windows 桌面动态链接库”项目,我仍然会遇到问题。
如果我这样做,我可以添加引用就好了。
但是,当我尝试构建时,构建失败。
但是,我可以按照前面演示文稿中的步骤成功引用 Win2D,无论是在 C++/WinRT Windows 运行时项目(无需任何额外配置)和 ComponentC++ Windows 桌面动态链接库项目(并运行 cppwinrt 命令 -此答案中描述的线工具)。但是,这对我没有帮助——我不想引用 NuGet 包;我正在尝试在同一解决方案中引用不同的项目。
所以,毕竟,问题是:如何使用通用 Windows 运行时从 C++ 代码调用 C# 代码?
com - 释放COM接口的正确方法
我们有一些使用 COM 的遗留软件代码。我注意到在一个地方,我们在 IInspectable 指针上执行 queryInterface,但不打扰调用 release。
例如:
我在上面的代码中添加了 Release,如下所示:
但是我看到上面的代码在发布期间有时会在上面的函数中崩溃。我发布界面的方式有问题吗?我可以确认在 Release 语句之后,函数中的其他任何地方都没有使用 myInterface。
抱歉无法复制/粘贴实际代码,但上面的代码几乎总结了我正在调试的可疑代码。基本上我想知道的是,在上述情况下,我需要调用 Release() 吗?这是调用 Release() 的正确位置/方式吗?我是否需要添加任何其他安全检查?
uwp - 我可以在非 UWP 应用程序中使用 C++/WinRT 吗?
我刚刚听说过 C++/WinRT,我很惊讶 C++ 有这个运行时,它添加了像 .NET 这样的高级类包装器。但我不想将我的应用程序作为 UWP 应用程序分发。我可以在非 UWP 应用程序中使用 C++/WinRT 吗?
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 工具链不能很好地配合,因为我的代码部分是从中生成的。