问题标签 [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 回答
47 浏览

image - 在 UWP WinRt 中,如何在现有 PDF 页面中插入图像

我正在寻找一种从 UWP 应用程序在 PDF 文件中插入图像的解决方案。

我需要创建一个新的 pdf,并在 PDF 文件上标记图像(不扭曲 PDF 质量)并将其导出给用户。

目前我正在打印扭曲 PDF 导出质量的文档。

请提出一些有用的参考。

我尝试从 iText 库开始,但 UWP 应用程序不支持它。

提前致谢.. :)

0 投票
1 回答
1240 浏览

uwp - UWP 代理的 Windows 运行时组件构建错误

我使用 VS2017 和 windows 10 创建了一个简单的 .Net 类库,并将输出类型更改为 winmdobj,如本 msdn 指南中所述: https ://docs.microsoft.com/en-us/windows/uwp/winrt-components/brokered -windows-runtime-components-for-side-loaded-windows-store-apps 但之后我构建了代码,但出现以下错误:

平台属性“Windows.Foundation.Metadata.ActivatableAttribute”在未引用或没有预期构造函数的程序集中定义。请确保您的程序集引用包括 .NET Framework 和 Windows 运行时平台程序集,例如 System.Runtime.dll 和 Windows.winmd。

我添加了对 System.Runtime.dll 和 Window.winmd 的引用,但仍然给我同样的错误

我是否使用了错误的参考资料?请问有什么帮助吗?

0 投票
1 回答
71 浏览

c# - WinRT 应用程序和遍历目录

我正在开发我的第一个WinRT应用程序,但似乎找不到任何代码可以让我遍历目录并获取该目录中的文件名?

我发现很多代码可以在普通的 winform、wpf 和控制台中执行此操作,但对于Winrt种类来说却没有。

我最接近的代码:

但这似乎只是获得了我自己项目中的文件?

我将如何扫描像“c:\something\something”这样的普通目录?

0 投票
0 回答
442 浏览

c# - 从 Windows 运行时组件访问 UI 线程仅在移动设备上引发异常

我有以下问题。我正在使用一个简单的 Windows 运行时组件在应用程序和WebView. 我正在根据文档执行此操作

这是 Windows 运行时组件的代码

OnNavigatedTo我初始化WebViewInjectionObject并订阅OnNotifyApp事件的方法中。

然后在NavigationStartingWebView打电话AddWebAllowedObject的情况下WebView

然后与 WebView 交互的方法中的代码WebViewInjectionObject_OnNotifyApp如下所示。

在桌面(版本 1709,内部版本 16299.371)上运行它时,一切正常。

在手机(版本 1709 和版本 1607)上运行它时,我得到了这个异常。

应用程序调用了为不同线程编组的接口。(来自 HRESULT 的异常:0x8001010E (RPC_E_WRONG_THREAD))

通常通过使用 dspatcher 从 UI 线程进行调用来解决此类欺骗。我试着做followig

但这导致了更深层次的例外

对 ASTA 的 COM 调用被阻止,因为调用链源自或通过另一个 ASTA。这种呼叫模式容易发生死锁,并且被公寓呼叫控制所禁止。对 ASTA(线程 3036)的 COM 调用(IID:{638BB2DB-451D-4661-B099-414F34FFB9F1},方法索引:6)被阻止,因为调用链源自或通过另一个 ASTA(线程 5964)。这种呼叫模式容易发生死锁,并且被公寓呼叫控制所禁止。

之后我想到了使用,SynchronizationContext所以我这样做了。在OnNavigatedTo

然后在WebViewInjectionObject_OnNotifyApp

这再次导致第一个例外。

我不知道下一步该做什么。目标是捕获从 Windows 运行时组件引发的事件,然后以适用于桌面和移动设备的方式调用InvokeScriptAsync该事件。WebView

0 投票
1 回答
187 浏览

c++ - C++/WinRT 数据不正确的数据编组

C++/WinRT 新手,在尝试使用 C++/WinRT 导出单个 C++ 类以在 .Net 应用程序中使用时遇到一些问题。

我在 Visual Studio 2017 v15.7.4 中创建了一个 C++ Windows 运行时组件(Windows 通用)。

这是我尝试使用的 C++ 函数的签名,因为它存在于我复制到 C++/WinRT 项目中的头文件中

如果它的重要上下文,该函数将字节数组 p 作为输入,并输出从它派生的 5 个数组:pCh1、pCh2、pCh3、pCePa、pTAc。

现在在 .Net 应用程序中,我从 WinRT 声明了该类的新实例并设置了所有缓冲区,仅作为示例:

VS 告诉我这是不正确的,因为签名不匹配。检查 Carryout 函数的定义会显示(我假设是)一个自动生成的头文件(在其描述中有“来自元数据”)并且其中的 Carryout 函数的签名完全不同:

请注意,函数参数不是数组,而是 byte/ushort 类型。此外,第一个参数不应该是out类型。解决此自动生成的标头的这种差异的正确方法是什么?

我宁愿不对 C++ 代码进行任何更改:它内部具有相当复杂的数据操作,并且很容易数十年的运行时间确保它一切正常。

先感谢您!

0 投票
1 回答
303 浏览

c# - WinRT 对象中的异步回调应该如何实现?

到目前为止,我可以创建一个委托类型,例如:

然后像这样在 WinRT 对象中公开:

在 WinRT 对象中,我会这样称呼它:

使用 WinRT 对象的客户端代码可以执行以下操作:

但是因为委托返回 anIAsyncOperation我们需要做一些包装:

只是感觉必须有一种更清洁的方法来实现这一目标。

0 投票
1 回答
886 浏览

windows-runtime - 什么是可组合的运行时类?

我正在尝试使用 C++/WinRT 创建一个简单的 xaml 应用程序。

我来自 WPF 背景,拥有一个实现 INotifyPropertyChanged 的​​基类并让其他类继承自它是很常见的。

当我尝试对 C++-WinRT 执行相同操作时,我失败并出现错误

以下是其余相关代码供参考:

ObservableObject.idl:

MainViewModel.idl:

那么究竟什么是可组合的运行时类呢?有没有办法用 C++/WinRT 实现这一点?我真的不想每次定义一个新的可绑定类时都重复 INotifyPropertyChanged 实现。

0 投票
1 回答
159 浏览

uwp - 从 UWP 应用程序 C# 项目调用 wrt/c++ Windows 运行时组件时出现 InvalidCastException

我有一个包含两个项目的小解决方案:

  • UWP 应用 (C#)

  • 应用程序引用的 Windows 运行时组件 (C++/WinRT)。

C++/WinRT 组件包含一个D3DPanel派生自Windows.UI.Xaml.Controls.SwapChainPanel. 当添加到 UWP C# 应用程序中的页面时,代码编译、控件显示并正常工作。

但是,当我调用派生控件公开的单个void StartRenderLoop()方法时,我得到:

这是idl代码:

这是实现类的声明方式:

(我知道控件有效的原因是,如果我在一切看起来都很好的StartRenderLoop()过程中从 WinRT 组件中调用)。OnLoaded

源代码的(几乎)最小版本可以在以下位置找到:https ://github.com/zrajnai/UWP_DX

要重现问题,请在 C++/Winrt 代码中注释掉对 StartRenderLoop 的调用: https ://github.com/zrajnai/UWP_DX/blob/227226e8dfbaf2b9b6ce78b6eb02c727c197e284/WRT_CPP/D3DPanel.cpp#L332

并取消注释引发异常的行: https ://github.com/zrajnai/UWP_DX/blob/227226e8dfbaf2b9b6ce78b6eb02c727c197e284/UWP_APP/MainPage.xaml.cs#L19

任何帮助表示赞赏。

0 投票
1 回答
764 浏览

windows-runtime - 如何使用midlrt.exe 将.idl 编译为.winmd?

背景:我需要构建一个 Windows 运行时组件作为系统的一部分,该系统设置为使用CMake生成其构建系统。作为准备步骤,我正在尝试在命令行上构建它。


从一个简单的 .idl 文件(MyType.idl)开始

我正在尝试使用midlrt.exe工具生成匹配的 .winmd 文件。以下命令行(为了便于阅读,分成几行)

生成 MyType.winmd 文件就好了,但我不知道为什么。我对/metadata_dirand/reference选项特别困惑。跑步midlrt /help提供以下内容:

/metadata_dir上的官方文档并没有增加太多(除了一个令人困惑的评论:“使用此开关指定 Windows 的主要元数据文件的位置,名为 windows.winmd。”)。没有文档/reference

以下是我需要帮助的内容:

  • 真正需要通过什么/metadata_dir选择?正如上面命令行中使用的那样,它看起来像是对部分/reference选项的冗余复制。但是,将其排除在外会产生编译器错误。
  • 如何确定所需的列表,/reference包括其特定版本?
0 投票
2 回答
146 浏览

windows-runtime - 我可以将“操作”添加到 winrt 组件中的运行时类吗

在下面的代码中,“RuntimeMethod1()”是一个操作。它不接受任何输入参数,也不返回任何结果。运行时类中是否允许使用这种方法?

我收到此运行时类的编译错误。它说

期待第 7 行“(”附近的标识符

如果我从类中删除“RuntimeMethod1()”,那么它可以很好地编译并生成投影和实现类型。