//Delphi 控件 import win.ui; /*检测DLL{{*/ if(!io.exist("\Project1.dll")){ import process; process.exploreSelect("\Project1.dpr"); error("请先用 Delphi 打开此目录下的 DLL 源码工程编译生成 \Project1.dll") } /*}}*/ //改为 raw.loadDll($"\Project1.dll") 表示嵌入 DLL 到代码并通过内存加载 var delphiDll = raw.loadDll("\Project1.dll"); class win.ui.ctrl.delphiForm{ ctor(parent,tParam){ /* aardio 可以免声明直接调用 API 函数(当然先声明API也是可以的,先声明可以支持更多的参数类型), 所有结构体(传址)、字符串、缓冲区( buffer )、不大于 32 位的整数、64位无符号整数(math.size64) 都可以直接作为调用参数,不需要指定类型,更可通过尾标语法指定返回值的类型以及是否对字符串进行 UTF-16 自动转换。 相关范例:「 aardio 范例 » 调用其他语言 » C语言 」 相关文档: doc://library-guide/builtin/raw/directCall.md */ this.hwnd = delphiDll.CreateForm(parent.hwnd); }; @..win.ui.ctrl.metaProperty() } /*DSG{{*/ var winform = win.form(text="用 Delphi 语言为 aardio 编写控件";right=507;bottom=423;bgcolor=11842740) winform.add( custom={cls="delphiForm";text="嵌入 Delphi 控件";left=17;top=28;right=490;bottom=211;db=1;dl=1;dr=1;dt=1;z=1}; edit={cls="edit";text="请先用 Delphi 打开此目录下的 DLL 源码工程编译生成 \Project1.dll";left=16;top=228;right=489;bottom=398;edge=1;multiline=1;z=2} ) /*}}*/ import JSON; winform.onTest = function(delphiStructParam){ winform.edit.print("Delphi 调用了aardio 函数,参数如下:"); winform.edit.print(delphiStructParam); delphiStructParam.x = 90; //可选返回修改后的结构体 return delphiStructParam; } winform.edit.text = ""; winform.show(); win.loopMessage();