aardio 文档

dotNet 库模块帮助文档

创建.NET 运行时

dotNet 成员列表

支持库
此名字空间下的函数由当前线程默认应用程序域提供,
使用无参数调用 dotNet.appDomain 获取当前线程默认应用程序域

dotNet.buffer

调用 raw.buffer 分配可读写的、固定长度的字节数组,

并返回封包 buffer 的 dotNet.object 对象。

可用[]下标操作符读写 8 位无符号字节数值。
可用 Value 属性获取 buffer 对象,用法请参考 raw.buffer 文档。
可用 Length 属性获取数组长度。

在 .NET 中对应类型为 byte[] 字节数组。
可作为 .NET 引用、输出参数使用。

dotNet.buffer()

返回对象:dotNetObject

dotNet.buffer(初始值)

分配可读写的、固定长度的字节数组。
参数可以是一个结构体、字符串、或 buffer,传入{ }返回null,
重新分配内存并复制初始值指定的数据。
返回封包 buffer 的 dotNet.object 对象

dotNet.buffer(长度,初始值)

分配可读写的、固定长度的字节数组。

参数一指定需要分配的内存大小,
,内存初始值可以用结构体、指针、buffer、或字符串指定一段内存数据,
也可用一个数值指定所有字节的初始值,不指定默认初始化所有字节为0,

如果初始值指定为字符串或buffer类型,
填充初始数据以后剩余的字节会全部初始为为0
返回封包 buffer 的 dotNet.object 对象

dotNet.byte

创建 .NET System.SByte 类型数值或数组

dotNet.byte()

返回对象:dotNetObject

dotNet.byte(value,byRef)

创建 .NET System.SByte 类型数值或数组,
用于存储8位整数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数

dotNet.createArray

创建 .NET 类型化数组。
.NET 通常要求数组类型完全匹配,可以用这个函数创建类型匹配的数组。

包含.NET 对象的普通 aardio 数组在传入 .NET 时也会临时转换为类型化数组
默认的普通数值数组传入 .NET 为 double 数组,但支持自适应转换类型。
也可以用 dotNet.double,dotNet.int 等函数创建类型化数值数组。

注意 .NET 数组对象应当用 Length 属性取数组长度而非用 #号取长度,
.NET 中的简单值类型数组在 aardio 中会转换为 com.SafeArray 数组,
com.SafeArray 数组可以用 # 取长度

dotNet.createArray(数组)

参数 @1 请指定数组。
包含.NET 对象的普通数组返回为 .NET 类型化数组,
传入其他任何类型参数直接返回

dotNet.createArray(类型,长度...)

参数 @1 请指定 .NET 类型,
类型通常由 dotNet.import 导入,或用 .NET 对象的 GetType 函数获取。
至少指定一个数组长度参数,可指定多个长度参数以创建多维数组

dotNet.createArrayList()

返回对象:dotNetCrlArrayListObject

dotNet.createArrayList(初始化数组)

创建 System.Collections.ArrayList 对象
可传递到C#函数中,C#中应声明为 object 类型,然后强制转换为 ArrayList,
可选参数一指定 table 数组用于初始化对象

dotNet.createCompiler("C#")

使用当前线程默认应用程序域创建C#编译器

dotNet.createCompiler("VB")

使用当前线程默认应用程序域创建VB编译器

dotNet.createCompiler()

返回对象:dotNetCompilerObject

dotNet.createNameValueList(names,values)

创建 List> 列表对象,
参数@name,@value 必须是长度相等的非空数组,
返回 List 对象的每个元素都具有 Name,Value 属性,
其值由 @names,@values 参数按数组索引顺序分配

dotNet.createWebService

使用当前线程默认应用程序域创建Web服务程序集

dotNet.createWebService()

返回对象:dotNetCrlAssemblyObject

dotNet.createWebService(服务网址,名字空间,协议名,DLL路径)

使用当前线程默认应用程序域创建 Web 服务程序集,
可选在参数@2中指定一个自定义的名字空间
协议名默认为"Soap",可选值"Soap12",
如果使用参数@4指定输出DLL路径则在内存中编译程序集

dotNet.delegate

用于操作 .NET 委托(Delegate)或事件(event),
在 .NET 里函数要转换为委托对象才能作为回调函数传输,
在 aardio 里对所有 .NET 对象的委托字段直接赋值总是覆盖而不是追加,
对所有 .NET 事件赋值时总是追加而不是覆盖,

返回对象:dotNetDelegateObject

dotNet.dict

将非空表转换为 .NET 字典。
如果要创建空字典,调用返回对象的 Clear 函数清空即可。
返回对象支持用下标操作符访问键值对。
可用 dotNet.each 遍历字典。

dotNet.dict()

返回对象:NetDictionaryObject

dotNet.dict(tab,byRef)

将非空表转换为 .NET 字典(Dictionary)对象。

如果传入空表或 null 返回 null 值。
否则必须传入非空表,表中所有的键必须是相同类型。
表中所有的值必须是相同类型。

参数 @byRef 为可选参数,如果 @byRef 为 true,
则返回对象可作为 .NET 输出与引用参数使用

dotNet.double

创建 .NET System.Double 类型数值或数组

dotNet.double()

返回对象:dotNetObject

dotNet.double(value,byRef)

创建 .NET System.Double 类型数值或数组,
用于存储64位浮点数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数,

注意普通数值传入 .NET 函数时,
整数默认转为32位整数,小数默认按double类型处理

dotNet.each(netObj)

for i,v in dotNet.each(/*输入需要遍历的 .NET 对象或普通数组,  
返回值 i 为当前索引,v 为当前值,  
注意并非所有 .NET 类型都支持此接口*/) {

}

dotNet.float

创建 .NET System.Single 类型数值或数组

dotNet.float()

返回对象:dotNetObject

dotNet.float(value,byRef)

创建 .NET System.Single 类型数值或数组,
用于存储32位浮点数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数

dotNet.getObject()

如果对象是 dotNet.object 对象
返回被封装的原生 com.NetObject 对象,
传入其他类型对象或原生 com.NetObject 对象会返回 null
如果参数 @2 为 true,则解开 DispatchableObject 封包对象。

原生 com.NetObject 对象传入 com.IsNetObject 函数应返回非 0 值

dotNet.import

加载程序集,导入 .NET 名字空间、类、枚举。
在当前应用程序域 import,load 等函数不会导入重复的程序集,
同一程序集中不会重复导入相同的名字空间。

如果已存在同名的全局名字空间但元表为空(并未导入 .NET 名字空间),
则导入 .NET 名字空间到已存在的名字空间。

如果已存在同名的全局名字空间但元表非空(通常为已导入的 .NET 名字空间 ),
则不会覆盖已存在的名字间,而是在返回值返回当前调用实际创建的名字空间。
加载程序集或依赖程序集失败时此函数会抛出异常。

dotNet.import(名字空间)

参数 @1 必须用字符串指定要名载的名字空间。
首先加载与名字空间同名的程序集,然后导入同名的 .NET 名字空间或类。
当程序集文件名与导入名字相同时,参数 @2 不必指定程序集名称。

返回名字空间可作为类构造函数调用并创建对象。
也可以用成员操作符获取静态成员,或调用静态函数。

导入的 .NET 名字空间在正常访问其成员时会触发元方法以获取并创建下级名字空间、类、枚举等。
但导入名字空间的函数(以及 namespace 语句)创建的上级名字空间并不会主动导入同名 .NET 名字空间\。

此函数会尽可能重用已存在的 aardio 全局名字空间导入 .NET 名字空间。
如果该全局名字空间已导入其他 .NET 名字空间则不会覆盖已存在的名空间。
此函数总是会返回当前调用实际创建的名字空间。

dotNet.import(名字空间,程序集名)

加载参数 @2 指定文件名字的程序集。
将参数 @1 指定的空间、类、枚举等导入 aardio 全局名字空间。
必须指定完整名字空间。
参数 @1 可指定名字空间也可以指定要导入的名字空间数组。

在当前应用程序域 import,load 等函数不会导入重复的程序集,
同一程序集中不会重复导入相同的名字空间。

返回名字空间可作为类构造函数调用并创建对象。
也可以用成员操作符返回静态成员,或调用静态函数。

导入的 .NET 名字空间在正常访问其成员时会触发元方法以获取并创建下级名字空间、类、枚举等。
但导入名字空间的函数(以及 namespace 语句)创建的上级名字空间并不会主动导入同名 .NET 名字空间。

此函数会尽可能重用已存在的 aardio 全局名字空间导入 .NET 名字空间。
如果该全局名字空间已导入其他 .NET 名字空间则不会覆盖已存在的名空间。
此函数总是会返回当前调用实际创建的名字空间。

dotNet.int

创建 .NET System.Int32 类型数值或数组

dotNet.int()

返回对象:dotNetObject

dotNet.int(value,byRef)

创建 .NET System.Int32 类型数值或数组,
用于存储32位整数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数,

注意普通数值传入 .NET 函数时,
整数默认转为32位整数,小数默认按double类型处理

dotNet.load

使用当前线程默认应用程序域载入并返回程序集(DLL)。
在当前应用程序域如果已使用此函数导入同名程序集,
则直接返回该程序集

dotNet.load("程序集名")

使用当前线程默认应用程序域载入并返回程序集。
参数可以是程序集(DLL)名称或路径。

此函数会按以下顺序调用 .NET 函数尝试加载程序集:
└── Assembly.LoadWithPartialName
└── Assembly.Load
└── Assembly.LoadFrom
└── Assembly.LoadFile

dotNet.load("程序集名",虚拟程序集数据或路径)

首先在『虚拟程序集引用表』中注册程序集名,
参数 @2 指定对应的内存 DLL 数据或 DLL 路径(支持 EXE 内嵌资源)。
然后再调用 load 函数加载并返回该虚拟程序集。

注意参数 @1 指定的是程序集的文件名,不是写导入的名字空间。
调用返回程序集对象的 import 成员函数再导入名字空间

dotNet.load()

返回对象:dotNetCrlAssemblyObject

dotNet.loadAppData

可用于嵌入并自 %appData% 目录加载
不支持通过 loadFile 函数内存加载的程序集

dotNet.loadAppData()

返回对象:dotNetCrlAssemblyObject

dotNet.loadAppData(path,data)

用 @path 指定 %appData% 目录下的相对路径,
将 @data 参数指定的内存程序集数据释放到该路径,
并使用 load 函数加载此程序集,
@data 参数应在路径前加$符号使文件数据嵌入到代码中

dotNet.loadFile

使用当前线程默认应用程序域载入程序集(DLL)。
参数可以是 DLL 路径,内存 DLL,或 EXE 内嵌资源。
此函数并不支持 『虚拟程序集引用表』,无法在内存添加依赖 DLL
程序集如果引用了自身路径必须改用 load 函数加载

dotNet.loadFile("程序集路径")

使用当前线程默认应用程序域载入程序集,
参数可以是 DLL 路径,内存 DLL,或 EXE 内嵌资源。

在路径字符串前加$符号可将文件编译并嵌入 aardio 代码,
可选在第 2 个参数中指定 pdb 调试数据或 pdb 调试文件路径。
可用 com.dte 对象提供的 AttachProcesses 自动附加到 VS 开发环境调试进程。

dotNet.loadFile()

返回对象:dotNetCrlAssemblyObject

dotNet.long

创建 .NET System.Int64 类型数值或数组

dotNet.long()

返回对象:dotNetObject

dotNet.long(value,byRef)

创建 .NET System.Int64 类型数值或数组,
用于存储64位整数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数

dotNet.object

转换参数 @1 指定的 aardio 值或数组为 .NET 原生 DispatchableObject 对象,
并返回为 aardio 可操作的 dotNet.object 对象。

也可用于转换 原生 .NET 对象为 dotNet.object ,
或转换 dotNet.object 为支持引用 dotNet.object。

dotNet.object 如果存储的是 Primitive,enum,string 类型或这些类型的数组,
则可以使用 Value 属性读写值。

dotnet.object 对象支持用 tostring 转换为字符串,
如果存储的是数值则支持调用 tonumber 函数转为普通数值。

dotNet.object()

返回对象:dotNetObject

dotNet.object(value,byRef)

参数 @byRef 为 true 则支持 .NET 的输出或引用参数

参数 @value 如果指定纯 aardio 对象或数组。
则转换为 .NET 原生 DispatchableObject 对象,并封装为 dotNet.object 后返回。

如果参数 @1 指定 dotNet.object 对象且参数 @2 不为 true 则直接返回。
如果参数传入原生 .NET 对象且参数 @2 不为 true 则仅转换为 dotNet.object。
如果参数 @2 为 true,则这些对象都会转换为 DispatchableObject 并返回新的 dotNet.object

dotNet.reference

在『虚拟程序集引用表』注册一个或多个虚拟程序集,
这些虚拟程序集可以是内存程序集、本地程序集、EXE 内嵌资源中的程序集。

aardio 加载的 .NET 程序找不到程序集(DLL)时,
会查找『虚拟程序集引用表』并加载已注册的虚拟 DLL。

同时复制多个 DLL 路径的方法:
在资源管理器多选 DLL 文件,按住 Shift 点右键菜单项『复制为路径』

dotNet.reference(assemblyName2pathOrData)

在『虚拟程序集引用表』注册多个虚拟程序集(DLL)。
@assemblyName2pathOrData 指定一个表:
表的「键」为虚拟程序集短名称( DLL 文件名 ),

键对应的「值」指定程序集内存数据或程序集路径(支持内嵌资源)。

同时复制多个 DLL 路径的方法:
在资源管理器多选 DLL 文件,按住 Shift 点右键菜单项『复制为路径』

dotNet.reference(simpleAssemblyName,pathOrData)

在『虚拟程序集引用表』注册虚拟程序集(DLL)。
@simpleAssemblyName 指定程序集短名称(虚拟 DLL 文件名)
@pathOrData 指定程序集路径或内存数据,支持内嵌资源路径
@pathOrData 也可以是返回程序集路径或数据的回调函数

dotNet.setParent

嵌入 .NET 窗口到 aardio 窗口,作用类似 win.setParent 函数。
此函数必须在导入 win.ui 的界面线程中使用

嵌入 .NET 控件而不是窗口对象,
请改用 System.Windows.Forms.CreateEmbed 函数

dotNet.setParent(netForm,aarForm)

嵌入 .NET 窗口到 aardio 窗口,并完全覆盖 aardio 窗口。
@netForm 参数指定 System.Windows.Forms.Form 对象,不能是控件,
@aarForm 参数指定 aardio 中的窗体对象或 custom 控件对象,

此函数设置 aarForm 为 netForm 的父窗口,
并禁止 aarForm 窗口绘制窗口背景,
控件自动填满 aarForm 内部并自适应窗口缩放

也可在 win.ui.ctrl 名字空间下创建自定义控件

dotNet.setParent(netForm,aarForm,false)

仅嵌入 .NET 窗口到 aardio 窗口。
不覆盖 aardio 窗口,不自动设置窗口位置,用于创建自定义控件。
@netForm 参数指定 System.Windows.Forms.Form 对象,不能是控件,
@aarForm 参数指定 aardio 中的窗体对象或 custom 控件对象,

此函数设置 aarForm 为 netForm 的父窗口,
并禁止 aarForm 窗口绘制窗口背景,
控件自动填满 aarForm 内部并自适应窗口缩放

也可在 win.ui.ctrl 名字空间下创建自定义控件

dotNet.ubyte

创建 .NET System.Byte 类型数值或数组

dotNet.ubyte()

返回对象:dotNetObject

dotNet.ubyte(value,byRef)

创建 .NET System.Byte 类型数值或数组,
用于存储8位无符号整数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数

dotNet.uint

创建 .NET System.UInt32 类型数值或数组

dotNet.uint()

返回对象:dotNetObject

dotNet.uint(value,byRef)

创建 .NET System.UInt32 类型数值或数组,
用于存储32位无符号整数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数

dotNet.ulong

创建 .NET System.UInt64 类型数值或数组

dotNet.ulong()

返回对象:dotNetObject

dotNet.ulong(value,byRef)

创建 .NET System.UInt64 类型数值或数组,
用于存储64位无符号整数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数

dotNet.unwrapObject()

如果对象是 dotNet.object 对象
返回被封装的原生 com.NetObject 对象,
否则直接返回参数
n
原生 com.NetObject 对象传入 com.IsNetObject 函数应返回非 0 值

dotNet.uword

创建 .NET System.UInt16 类型数值或数组

dotNet.uword()

返回对象:dotNetObject

dotNet.uword(value,byRef)

创建 .NET System.UInt16 类型数值或数组,
用于存储16位无符号整数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数

dotNet.wait

等待 .NET 异步任务执行完成。
如果任务执行成功返回 true ,取消或出错返回 false 。

dotNet.wait(task,winform,...)

参数 @1 指定异步函数返回的 System.Threading.Tasks.Task 对象。
参数 @2 指定 win.form 对象,其他可选参数传给 winform.wait 函数。
异步任务的 Result 属性可取返回值,Exception.Message 属性可取错误信息。
也可以用异步任务的 ContinueWith 方法指定异步回调函数,在任务完成后触发。

dotNet.word

创建 .NET System.Int16 类型数值或数组

dotNet.word()

返回对象:dotNetObject

dotNet.word(value,byRef)

创建 .NET System.Int16 类型数值或数组,
用于存储16位整数。

参数 @value 可以为数值或数组,
参数 @byRef 为 true 则支持 .NET 的输出或引用参数

dotNet.wrapObject()

如参数是原生 com.NetObject 对象,则返回 dotNet.object 对象,否则直接返回参数。

所有 .NET 原生对象已经自动转换为 dotNet.object 对象,
除非 .NET 调用普通 aardio 对象的成员函数而非回调特定的委托或事件函数。
这时候回调参数中的 .NET 对象需要用此函数转换,但数值和字符串不需要转换。

参数传入 com.IsNetObject 函数会返回非 0 值即为原生 com.NetObject 对象,
非原生 com.NetObject 对象转换为 dotNet.object 应当直接调用 dotNet.object 函数。

dotNetObject 成员列表

dotNetObject.Length

如果 dotNet.object 对象存储的是数组,可用些属性获取数组长度。
并可以用数值下标读写指定索引的值

dotNetObject.Value

如果 dotNet.object 对象存储的是
.NET 中的 Primitive,enum,string 类型或这些类型的数组,
则可以使用 Value 属性读写值

dotNetObject.byRef(true)

如果 dotNet.object 对象存储的是 DispatchableObject 。
则可调用此函数修改传参方式,参数用布尔值指定是否支持参数传址(作为引用或输出参数)。
如果不指定参数则获取一个表示是否支持参数传址的值。
指定参数 @1 则返回对象自身。

.NET 返回的 aardio 无法直接使用的对象会自动封包为 DispatchableObject 。
调用 dotNet.object 也可以创建 DispatchableObject。

dotNetCrlAssemblyObject 成员列表

dotNetCrlAssemblyObject.FullName

获取程序集的全名

dotNetCrlAssemblyObject.Location

获取完整路径

dotNetCrlAssemblyObject.getStaticMember("类名.字段名")

获取字段或属性值、或枚举值

dotNetCrlAssemblyObject.import("字符串参数")

参数 @1 指定要导入 .NET 名字空间、类、枚举,
与程序集名称相同的名字空间前缀可省略。
不传入参数则默认指定参数为程序集名称。

在当前应用程序域 import,load 等函数不会导入重复的程序集,
同一程序集中不会重复导入相同的名字空间。

返回名字空间可作为类构造函数调用并创建对象。
也可以用成员操作符返回静态成员,或调用静态函数。

导入的 .NET 名字空间在正常访问其成员时会触发元方法以获取并创建下级名字空间、类、枚举等。
但导入名字空间的函数(以及 namespace 语句)创建的上级名字空间并不会主动导入同名 .NET 名字空间\。

此函数会尽可能重用已存在的 aardio 全局名字空间导入 .NET 名字空间。
如果该全局名字空间已导入其他 .NET 名字空间则不会覆盖已存在的名空间。
此函数总是会返回当前调用实际创建的名字空间

dotNetCrlAssemblyObject.invokeMember("类名.方法名",BindingFlags)

调用类的方法,
可添加不定个数调用参数
失败返回空值,以及错误信息

dotNetCrlAssemblyObject.invokeStaticMember("类名.方法名",... )

调用类的静态方法,
可添加不定个数调用参数
失败返回空值,以及错误信息

dotNetCrlAssemblyObject.new("类名",... )

创建对象实例,
可添加不定个数构造参数
失败返回空值,以及错误信息

Markdown 格式