# aardio 范例: 通过 .NET 调用 WinRT / UWP 接口



```aardio
//aardio 通过 .NET 调用 WinRT / UWP 接口 
//标准库 dotNet.ocr, 扩展库 dotNet.toastListener 都运用了以下方法编译 DLL 。
//调用 UWP / WinRT 接口 https://www.aardio.com/zh-cn/docs/library-guide/std/dotNet/_.html#uwp
import console.int;
import dotNet.uwpCompiler;

var uwpCompiler; 
try{

	/*
	创建启用 WinRT / UWP 接口的 .NET 编译器，
	请先安装 Windows 10 SDK，安装 SDK 后 aardio 会自动引用 Windows.winmd 。
	可选用参数 @2 显式指定 WinRT 元数据文件 Windows.winmd 的路径（一般不必要）。
	Windows.winmd 是一个大集合，一般不需要额外再引用其他系统 winmd。
	调用编译后的 DLL 不需要 Windows.winmd ，仅编译时需要。
	
	dotNet.uwpCompiler 基于 CLR 4.0 编译器，
	在 Win10 以及更新系统支持并且仅支持 C# 5.0 语法。
	
	已默认添加引用 System.Runtime.dll,System.Runtime.WindowsRuntime.dll,System.Runtime.InteropServices.WindowsRuntim
	*/	
	uwpCompiler = dotNet.uwpCompiler("/aardio.WindowsRuntime.dll")	
}
console.assert(uwpCompiler,"请先安装 Windows 10 SDK") 

uwpCompiler.Parameters.CompilerOptions = "/optimize"

//C# 源代码
uwpCompiler.Source = /****** 
using System; 
using System.Threading.Tasks; 

namespace aardio.WindowsRuntime{

	public class API {
		
		//异步函数
    	public async Task<bool> 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);

```

