//aardio 通过 .NET 调用 WinRT / UWP 接口 //标准库 dotNet.ocr, 扩展库 dotNet.toastListener 都运用了以下方法编译 DLL 。 //调用 UWP / WinRT 接口 doc://library-guide/std/dotNet/_.html#uwp import console.int; import dotNet.uwpCompiler; /* 创建启用 WinRT / UWP 接口的 .NET 编译器, 请先安装 Windows 10 SDK,或用参数 @2 指定 WinRT 元数据文件 Windows.winmd 的路径。 调用编译后的 DLL 不需要 Windows.winmd ,仅编译时需要。 */ var uwpCompiler = dotNet.uwpCompiler("/aardio.WindowsRuntime.dll") uwpCompiler.Parameters.CompilerOptions = "/optimize" //C# 源代码 uwpCompiler.Source = /****** using System; using System.Threading.Tasks; namespace aardio.WindowsRuntime{ public class API { //异步函数 public async Task LaunchUriAsync(string uri) { return await Windows.System.Launcher.LaunchUriAsync( new Uri(uri) ); } //同步函数 public bool LaunchUri(string uri){ return LaunchUriAsync(uri).GetAwaiter().GetResult(); } } } ******/ //编译 DLL var ret = uwpCompiler.Compile(); if(!ret){ console.log("编译错误:",uwpCompiler.getLastError() ); return; } //加载编译后的程序集 var assembly = dotNet.load("/aardio.WindowsRuntime.dll"); //导入命名空间 assembly.import("aardio.WindowsRuntime"); //创建 .NET 对象 var uwp = aardio.WindowsRuntime.API(); //调用同步方法 uwp.LaunchUri("ms-screenclip:"); //调用异步方法 //var task = uwp.LaunchUriAsync("ms-screenclip:") //同步等待任务完成,不会阻塞界面 //var result = dotNet.wait(task);