使用aardio 轻松调用 dotNet 代码

admin2021-11-09  342

Yimao软件

标准库 dotNet 最新版进行了大幅改进,现在调用 .Net 代码更简洁了,在 aardio 中调用 .Net 将会像调用 aardio 自己一样简单。dotNet 库函数文档以及相关范例都进行了同步的更新,代码更简洁,可读性更好,文档也更容易理解和学习了。当然我们将保持一如既往的良好兼容性,原来的写法继续支持,新版只是增强功能和接口,并不改变原来的东西。

import console;
import dotNet;
 
//导入程序集 
var dll = dotNet.load("System"); 

//导入程序集中的名字空间或类
var System = dll.import("System");

//调用类的静态成员函数,当然也可以这样读写类的其他静态成员属性。
var isValidHost = System.Uri.CheckHostName("www.aardio.com") 

//用 System 名字空间下面的类构造对象实例
var uri = System.Uri("https://www.aardio.com/test?q=aardio")

//读或写 .Net 对象的实例属性
console.log( uri.Host )

//调用 .Net 对象实例的成员函数
console.log( uri.GetHashCode() )
 
//.Net 对象还可以用 tostring 转换为字符串
console.log( tostring(uri) ) 

console.pause();


在 aardio 中调用 .Net 有一个好处是不用选择 .Net 版本,不论用户系统安装的是哪个版本都会自动兼容。
另外 aardio 支持自内存加载 .Net 编写的DLL,甚至支持直接在 aardio 重写或编译 C# 源代码,这可以让我们非常方便地调用 .Net 的一切,还能生成极小的、可以独立发布的 EXE 文件。
自内存加载 DLL 很简单,示例:

var Interop = dotNet.loadFile($"~\lib\dotNet\.res\bin\Release\Aardio.InteropServices.dll");
只要在文件路径前加上 $ 符号,aardio 就会将这个文件编译并嵌入程序中,发布后就不再需要原来的 DLL 文件了。
再来个 .Net 版 JSON 解析:

import console;  
import dotNet.json;
  
//导入 System 名字空间
var System = dotNet.load("mscorlib").import("System");

//创建 .Net 的 ArrayList 数组
var arrList = System.Collections.ArrayList();

//操作 .Net 对象
arrList.Add(123);
arrList.Add("字符串");

//.Net 对象转换为 JSON
var json = dotNet.json.SerializeObject(arrList);
console.log(json);

//导入 dotNet.json 以后 web.json 会自动支持 .Net对象
console.log(web.json.stringify(arrList));

//这个函数内部也是调用 web.json.stringify
console.dumpJson(arrList);

//JSON 解析为 .Net 对象
var obj = dotNet.json.DeserializeObject(json);
console.log(obj);

console.pause();
调用 UI Automation :

//UI Automation
import process;
process.executeWaitInput("notepad.exe",io.getSpecial(0x25/*_CSIDL_SYSTEM*/,"drivers\etc\HOSTS"));
 
import dotNet; 


//加载 .Net 程序集
var UIAutomationTypes = dotNet.load("UIAutomationTypes");
var UIAutomationClient = dotNet.load("UIAutomationClient");


//导入 .Net 类
var TreeScope = UIAutomationTypes.import("System.Windows.Automation.TreeScope"); 
var Automation = UIAutomationClient.import("System.Windows.Automation");
var PropertyCondition = UIAutomationClient.import("System.Windows.Automation.PropertyCondition");


//访问 .Net 类的静态成员
var AutomationElement = Automation.AutomationElement;
var desktop = AutomationElement.RootElement;


//查找记事本窗口
var condNotepadClass = Automation.PropertyCondition(AutomationElement.ClassNameProperty,"Notepad")
var notepad = desktop.FindFirst( TreeScope.Children, condNotepadClass) 


//查找记事本的编辑框
var condEditClass = Automation.PropertyCondition(AutomationElement.ClassNameProperty,"Edit");
var editBox = notepad.FindFirst( TreeScope.Descendants, condEditClass); 


//获取记事本内的文本
var textPattern =  editBox.GetCurrentPattern(Automation.TextPattern.Pattern);
var text = textPattern.DocumentRange.GetText(50)


import win.dlg.message;
win.dlg.message().info(text   " ……")


使用aardio 轻松调用 dotNet 代码

转载请注明原文地址: http://aardio.net/read-266.html
最新回复(1)
  • gps992月前
    引用2
    太好了! 这些专题讲解,正是最急迫了解的问题。 mark了,学习中ing。。
aardio问答
aardio编程语言