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

0 投票
0 回答
67 浏览

c# - Window Cordova 抛出 System.IO.FileLoadException:无法加载文件或程序集“System.Runtime.WindowsRuntime ...”

我使用 windows 平台创建了一个示例 cordova 应用程序并添加了一个测试插件,同时通过测试插件调用本机代码。我得到了例外

WinRTError:找不到与此错误代码关联的文本。

System.IO.FileLoadException:无法加载文件或程序集“System.Runtime.WindowsRuntime,版本=4.0.11.0,Culture=neutral,PublicKeyToken=..”。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)在 WindowImageAnnotation.ImageAnnotationPlugin.CreateImageAnnotation(String jsonString) 在 module.exports.coolMethod (ms-appx-web://../www/plugins/cordova-plugin-imagewindow/src/windows/WindowImageProxy .js:25:11)

应用版本: 在此处输入图像描述

本机代码版本: 在此处输入图像描述

此行在插件内抛出异常,方法存在于该变量“ev”中

在此处输入图像描述

在此处输入图像描述

例外: 在此处输入图像描述

本机代码: 在此处输入图像描述

我也更改了版本并尝试但每次都遇到相同的异常。关于这个的任何解决方案。如有需要会提供。提前致谢

在 Visual Studio Community 2017 15.9.30 中运行应用程序

0 投票
1 回答
77 浏览

c# - 调试 C# UWP 应用时未命中“WinRT 组件 DLL”中的断点

我在“Black App(Universal Windows) C#”项目中提到了一个“Windows Runtime component(Universal Windows) C++”项目。

我在“Windows 运行时组件(通用 Windows)C++”项目中设置了一个断点。但是断点永远不会命中,我无法从 C# 进入 C++ 代码。

我的VS2019版本16.8.3的选项 在此处输入图像描述

在此处输入图像描述

我发现在运行 C# Metro App RRS 提要时调试 WinRT 组件 DLL并创建了一个名为“.csproj.user”的文件,并将其放在与“.csproj”文件相同的文件夹中。

但它不起作用!

有什么建议吗?

0 投票
0 回答
239 浏览

c# - 无法将 WinRT/C++ 组件加载到我的 UWP/C# 应用程序

我需要将 WebRTC c++ 库包装到 WinRT 组件中,并从我的 UWP/C# 应用程序中使用它。有一篇很好的文章how to use native c++ in uwp描述了我遵循的所有集成步骤。简要地:

  • 我已经创建了 Dll/C++DLL1库并链接了我的静态库libwebrtc_full.a。拨打了所有必要的电话
  • 然后,我在我的 WinRT/C++ 项目中引用了 DLLWindowsRuntimeComponent1并成功创建了公共 ref 类MyClass,它从DLL1
  • 我的 UWP 应用程序可以正确App1查看MyClass,并且它的公共方法App1引用了 WindowsRuntimeComponent。

在运行应用程序时,一旦我尝试使用其中一个实现的类,就会出现运行时异常WindowsRuntimeComponent1

我创建并上传了一个示例项目以将我的问题重现到GDrive我在示例项目中也包含了我的静态libwebrtc.a,以防它是问题的根本原因。

我已经经历了关于 SO 的类似问题,与我的问题最相似的是这个问题。不同之处在于我正在引用该项目并且仍然得到相同的异常。

编辑1:

这是MyClass这样的:

EDIT2:gflags App1.exe +sls按照评论中的建议运行,但我没有看到缺少什么依赖项。下面是带有堆栈跟踪的屏幕截图:

在此处输入图像描述

0 投票
0 回答
65 浏览

visual-studio - 定位平台“Win32”和定位平台“x86”有什么区别?为什么它们不兼容?

我正在构建一个已内置一些代码的新解决方案。第一个项目是 Win32 控制台应用程序,第二个项目是 Windows 运行时组件。我无法从 win32 项目引用 WinRT 组件,因为它们针对不同的平台。我试图创建一个新的平台选项,但没有成功。我读到Win32可以针对x86不能的芯片组。但有了最小的混乱,我似乎无法让它匹配。如果这很重要,我只会在windows 10 (16299)以后运行此解决方案。

有什么区别以及解决此问题的正确方法是什么?

在此处输入图像描述

0 投票
1 回答
274 浏览

c# - 您可以从基本 Win32 控制台模板应用程序(不是 WinForm/abstractions/wrappers 或使用 C++/Winrt 模板)内的 C#/Winrt 组件调用吗?)

我有一个现有的程序 win32 (x86) 控制台应用程序,需要调用托管代码(来自 .Net 的 C# .dll)。不向 COM 公开,.dll但可以从 C#/WinRT 组件调用并由 C++/WinRT 控制台模板应用程序引用,即使在安装 C++/WinRT NuGet 后,我​​似乎也无法从 win32 x86 控制台应用程序调用它包裹。我已经构建并运行了这个示例,但使用的应用程序始终使用 C++/WinRT 模板。当我尝试使用基本 win32 应用程序重现该示例时,我收到错误消息REGDB_E_CLASSNOTREG Class not registered

我发现了另一个示例,展示了如何在 win32 应用程序中使用 C++/WinRT 组件,而无需注册类。我以为这就是我的答案。但是,该过程涉及进入应用程序清单并通过.dll在 C++/WinRT 组件生成时引用输出的文件来指定可激活的 WinRT 类。

这是问题所在:C#/WinRT 组件输出.dll文件,只有.winmd. (请参阅编辑)使用该.winmd文件,我仍然可以引用这些类并构建我的项目,但我最终遇到了同样的REGDB_E_CLASSNOTREG Class not registered错误。我假设 C++/WinRT 和 C#/WinRT 组件都会编译成中间语言(见评论),但为什么 C++/WinRT 输出 a.dll和 a .winmd,而 C#/WinRT 只输出.winmd文件?我尝试使用WinRT.Runtime.dll代替输出.dll,但这也不起作用。

我不知所措。我发布了另一个关于 C++/WinRT 模板与带有 C++/WinRT NuGet 包的 win32 之间的区别的问题。

.dll主要问题:我能否以某种方式在基本的 win32 控制台应用程序中使用 C# (未公开 COM)?

编辑

我意识到我使用的是特定于 UWP 的 C# Windows 运行时组件模板。这可能是构建时没有输出 .dll 的原因。

在此处输入图像描述

按照 Simon 的回复,我能够创建一个可以从 Win32 控制台应用程序调用的 C# WinRT 组件。此 C# WinRT 组件会输出 .dll 和 .winmd 我更接近于Simon 发布的关于使用 C++的文章,并设法让它与基本的 C# 函数一起使用。

0 投票
0 回答
66 浏览

c# - 如何将非原始类型从 C# winrt 组件返回到 C++?

我目前有一个工作项目,我正在使用免注册 Winrt在 win32 控制台应用程序中使用 C# WinRT 组件。一切都运行良好,但是当我尝试使用 C# 组件中的 Async 方法时出现了问题。由于Tasks 不是 WinRT 类型,因此我四处寻找解决方案。那么从 C# WinRT 组件调用异步方法的正确方法是什么?

我正在使用 winmdidl.exe 和 midlrt.exe 为控制台应用程序创建我的 WinRT comp 头文件。我还包括了“Winrt/Windows.Foundation.h”。

我试过“如何在 Windows 运行时组件中公开异步方法”。这将构建,但它在运行时会出现令人生畏的 (imo) 错误Class not registered。也是从2014年开始的。

C# WinRT 组件:

更新

我注意到这发生在每个非原始的 WinRT 类型上。我正在尝试实现这些工作中的一个IList<int>IDictionary<int, string>两个都不是。我发现“将托管类型传递给 Windows 运行时”导致“从您的组件返回托管类型”,但我尝试的每一次尝试都导致了Class not registered错误。在链接的文章中,它提到当将 .Net 类型传递给 WinRT 组件时,它会在另一端显示为相应的 WinRT 类型,这听起来应该可以工作。我也尝试过使用IMap<int, string>,但错误与IMap<K, V> is inaccessible due to its protection level. 我已经更新了示例代码。

0 投票
1 回答
84 浏览

c++ - C++ 编译器错误 MDM2009 发现重复类型处理引用另一个库的 2 个 Windows 组件库的元数据文件

我的解决方案结构如下所示:在此处输入图像描述

编译器抱怨它在 WCL1.winmd b/c 中发现(每个公共接口/类的)重复类型,该 winmd 文件已经存在于 WCL4 的 bin 目录中。

一个问题是我对 C++ 完全一无所知,并且该问题的答案中提供的链接提供了一个无济于事的 C++ 解决方法(它实际上就像阅读一种不同但相关的语言——即,当我只知道时阅读德语英语)。

我还发现提供了另一种解决方法,但没有告诉你把它放在哪里。我将指定的 ItemGroupDescription 元素添加到每个 .csproj 文件以及应用程序的 PropertySheet.props 文件中均无济于事。

我还做了以下事情:

  • 将代码从 WCL2 移至 WCL3 并从解决方案中删除 WCL2。
  • 有应用程序引用 WCL1、WCL3 和 WCL4。

其他人有任何想法吗?这将不胜感激....

更新:

这是一个重现编译错误的小解决方案的链接。它似乎来自C++ 应用程序引用的Microsoft.Windows.CppWinRT NuGet 包。该包从应用程序引用的组件项目生成的 .winmd 文件中自动生成 C++ 头文件。

0 投票
0 回答
57 浏览

uwp - 我可以调试 UWP winrt 库吗?Microsoft 是否为这些库提供符号文件?

我在开发 UWP 应用程序时遇到了问题。所以我想知道 Windows 是否为 winrt 组件提供符号文件。特别是我希望进入功能 LoadComponentWithResourceLocation (https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.application.loadcomponent?view=winrt-22000)你能告诉我如何如果可能的话,加载这些符号?谢谢

更新:以下是尝试加载 Windows.UI.xaml.dll 符号文件时弹出的对话框

在此处输入图像描述

更新 2:未加载 Windows.UI.xaml.dll 的符号

在此处输入图像描述

0 投票
0 回答
114 浏览

winrt-xaml - 无法编译引用自定义 Windows 运行时组件的 WinUI 3.0 应用

我有一个包含两个项目的 Visual Studio 2019 解决方案。

第一个项目是使用“Windows 运行时组件 (WinUI 3) Visual Studio 模板(库项目)创建的。它生成一个 dll 和关联的 winmd 文件,其中包含一个基于 DirectX 的 Windows 运行时组件,用于WinUI 3.0 应用程序。

第二个项目是使用“Blank App, Packaged (WinUI 3 in Desktop)”Visual Studio 模板创建的。它生成一个使用 WinUI 3.0 作为 UI 框架的 Win32 应用程序,并使用第一个项目的输出。

第二个项目通过 Visual Studio / MSBuild 项目引用引用了第一个项目。

第一个项目通过MIDL如下方式定义组件:

从 this 中生成的标头如下所示:

然后,我尝试在Microsoft.UI.Xaml.Controls.PageXAML 文件中使用该组件,如下所示:

但是,如果我编译整个代码,我会收到以下错误消息:

CustomControl不知何故,在编译为引用它的 XAML 文件生成的源代码时,无法识别my 。我不明白问题是什么。理论上,使用该组件所需的只是 winmd 文件,因为它应该描述该组件。

有人可以告诉我为什么会出现这些错误吗?

编辑:

我试图重现该问题,生成的 Git 存储库可在此处获得

0 投票
1 回答
50 浏览

c++-winrt - 如何从 WinUI 3.0 运行时组件库访问 GetDoubleClickTime Win32 API 函数

我正在尝试使用 C++ 从使用“Windows 运行时组件 (WinUI 3)”Visual Studio 模板创建的新项目中调用GetDoubleClickTime Win32 API 函数。

为此,我将添加#include <Windows.h>pch.h文件中,然后简单地调用提到的函数。但是,之后我收到以下编译器错误:error C3861: 'GetDoubleClickTime': identifier not found.

根据模板描述,这个项目应该创建一个在桌面和 UWP 应用程序中都可用的库。我知道GetDoubleClickTime无法从 UWP 调用该函数。但它必须适用于桌面应用程序。

我怎样才能使这项工作?