aardio 文档
aardio 范例:调用 DLL
//调用 DLL
import console
//加载 DLL , DLL 路径前加 $ 实现内存加载 DLL(发布后不需要外部 DLL 文件)
var dll = raw.loadDll($"/fortran.dll",,"cdecl");
/*
不声明直接调用,结构体默认传址,这不用改什么。
生成的函数名用 「aardio 工具 / 探测器 / DLL 查看工具」 看一下就明白了,前面加模块名,函数名全转小写。
*/
var c = dll.__test_MOD_addbypoint({
int x = 22;
int y = 3;
})
console.log(c);
/*
Fortran 中的 integer 相当于 aardio 中的 int 类型,32位,可用 raw.int() 函数创建,或在 API 中声明为 int 类型。
Fortran 中的 integer*1 相当于 aardio 中的 byte 类型,8位,可用 raw.byte() 函数创建,或在 API 中声明为 byte 类型。
Fortran 中的 integer*2 相当于 aardio 中的 word 类型,16位,可用 raw.word() 函数创建,或在 API 中声明为 word 类型。
Fortran 中的 real(C_FLOAT), 相当于 aardio 中的 float 类型,32位,可用 raw.float() 函数创建,或在 API 中声明为 float 类型。
Fortran 中的 real(c_double), 相当于 aardio 中的 double 类型,64位,可用 raw.double() 函数创建,或在 API 中声明为 double 类型。
https://gcc.gnu.org/onlinedocs/gfortran/ISO_005fC_005fBINDING.html
*/
//可以先声明一下,参数类型加上&声明为按引用传址(指针)
var add = dll.api("__test_MOD_add","int(int &a,int &b)")
var c = add(33,2); //Fortran 的数值参数默认都是传址(传指针)
//不声明直接调用可以用结构体取代指针
var c = dll.__test_MOD_add({int a=33},{int b=2});
//用 raw.int 创建传址数值也可以
var c = dll.__test_MOD_add(raw.int(33,true),raw.int(2,true));
//参数声明为传值时调用更简单,不声明调用时数值默认为 int 类型
var c = dll.__test_MOD_addbyval(33,2,raw.double(123));
console.log(c);
//字符串
var str = "hello"; //只读字符串,改用 raw.buffer 创建可读写字节数组
dll.__test_MOD_hello(str,#str); //注意到字符串长度传过去
//数组
var array = {1,2,3}
var c,cArray = dll.__test_MOD_testarray({int items[]=array},#array); //注意到字符串长度传过去
console.log(c);
console.log(cArray.items[1]); //不声明直接调 API,结构体都会在返回值返回
console.pause(true);
Markdown 格式