//aardio 导入 .NET 命名空间 import dotNet; //导入 .NET 命名空间,参数 @2 指定程序集名字(与命名空间相同时可省略)。 dotNet.import("System"); //System 其实已自动导入,这里只是用来举例。 /* 访问下级 .NET 命名空间、类、枚举时,可通过触发元方法自动导入(必须在同一程序集内)。 注意打开命名空间的 namespace 语句不会触发元方法,但 with 语句可以。 */ var uri = System.Uri("http://www.aardio.com"); /* aardio 会优先搜索加载 .NET 命名空间的程序集。 如果找不到类型,则会全局搜索所有已加载的程序集。 而 System.dll,mscorlib.dll 属于默认加载的系统程序集。 当然,也可以象下面这样自指定程序集加载下级命名空间(在 aardio 新版本中不是必须的)。 */ dotNet.import("System.Security.Cryptography","mscorlib"); /* 上级命名空间自动导入下级命名空间,反之不行。 不会自动导入或替换上级命名空间,例如下面的代码不能替代 dotNet.import("System"); */ dotNet.import("System.Security.Cryptography.X509Certificates","System"); //============================================================================ //重复导入同一命名空间被忽略,不报错 dotNet.import("System"); //可用 System.__assembly 得到导入该命名空间的程序集 /* 如果从不同的程序集导入相同的 .NET 命名空间, 则不会替换已导入的 .NET 命名空间,只能从返回值获取导入的命名空间。 重复导入通常是不必要的,aardio 会从所有已加载的程序集搜索命名空间与类型。 */ var SystemCore = dotNet.import("System","mscorlib"); //============================================================================ //.NET 命名空间按 .NET 规范命名,aardio 命名空间则统一为首字母小写的小驼峰规范。 //aardio 已经提供了一些库可用于导入 .NET 命名空间,例如: import System.IO; /* 创建 System.IO.FileStream 对象实例, 因为 System.IO 库已经预处理了路径参数。 所以不需要再调用 io.fullpath 转换。 */ var fs = System.IO.File.Create( "/.testStream.txt" ); //也可以这样写,支持 aardio 兼容的读写模式 //var fs = System.IO.FileStream("/.testStream.txt","w+"); //将字符串转换为二进制字节串(buffer 类型),buffer 相当于 .NET 中的字节数组 var buf = raw.buffer("测试一下"); fs.Write(buf,0,#buf); fs.Close(); import win.dlg.message; win.dlg.message().doModal(string.load("/.testStream.txt")); //创建内存文件流 var memoryStream = System.IO.MemoryStream(); //调用 .NET 函数,写入二进制数据 var bytes = raw.buffer('dd\0d'); memoryStream.Write(bytes, 0, #bytes); //重置流的位置到开头 memoryStream.Seek(0, System.IO.SeekOrigin.Begin); //读取全部数据到缓冲区( buffer ) var buffer = memoryStream.GetBuffer()