问题标签 [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.
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 中运行应用程序
c# - 调试 C# UWP 应用时未命中“WinRT 组件 DLL”中的断点
我在“Black App(Universal Windows) C#”项目中提到了一个“Windows Runtime component(Universal Windows) C++”项目。
我在“Windows 运行时组件(通用 Windows)C++”项目中设置了一个断点。但是断点永远不会命中,我无法从 C# 进入 C++ 代码。
我发现在运行 C# Metro App RRS 提要时调试 WinRT 组件 DLL并创建了一个名为“.csproj.user”的文件,并将其放在与“.csproj”文件相同的文件夹中。
但它不起作用!
有什么建议吗?
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++ 项目中引用了 DLL
WindowsRuntimeComponent1
并成功创建了公共 ref 类MyClass
,它从DLL1
- 我的 UWP 应用程序可以正确
App1
查看MyClass
,并且它的公共方法App1
引用了 WindowsRuntimeComponent。
在运行应用程序时,一旦我尝试使用其中一个实现的类,就会出现运行时异常WindowsRuntimeComponent1
我创建并上传了一个示例项目以将我的问题重现到GDrive我在示例项目中也包含了我的静态libwebrtc.a
,以防它是问题的根本原因。
我已经经历了关于 SO 的类似问题,与我的问题最相似的是这个问题。不同之处在于我正在引用该项目并且仍然得到相同的异常。
编辑1:
这是MyClass
这样的:
EDIT2:
我gflags App1.exe +sls
按照评论中的建议运行,但我没有看到缺少什么依赖项。下面是带有堆栈跟踪的屏幕截图:
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# 函数一起使用。
c# - 如何将非原始类型从 C# winrt 组件返回到 C++?
我目前有一个工作项目,我正在使用免注册 Winrt在 win32 控制台应用程序中使用 C# WinRT 组件。一切都运行良好,但是当我尝试使用 C# 组件中的 Async 方法时出现了问题。由于Task
s 不是 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
. 我已经更新了示例代码。
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++ 头文件。
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 的符号
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.Page
XAML 文件中使用该组件,如下所示:
但是,如果我编译整个代码,我会收到以下错误消息:
CustomControl
不知何故,在编译为引用它的 XAML 文件生成的源代码时,无法识别my 。我不明白问题是什么。理论上,使用该组件所需的只是 winmd 文件,因为它应该描述该组件。
有人可以告诉我为什么会出现这些错误吗?
编辑:
我试图重现该问题,生成的 Git 存储库可在此处获得
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 调用该函数。但它必须适用于桌面应用程序。
我怎样才能使这项工作?