aardio 文档
aardio 范例: 调用 C 语言 - 结构化参数表
//aardio 调用 C 语言 - 结构化参数表
import tcc;
var c = tcc();
c.enableIoPrintf();
c.code = /****
#include <stdio.h>
#include <stdlib.h>
//在C语言中定义 raw.cdeclParameter,注意 aardio 字符串默认为 UTF8 编码
typedef struct{
const char *(__cdecl *getType) (const char * name);
void * (__cdecl *getFunction) (const char * name,const char *proto);
void (__cdecl *setFunction) (const char * name,const char *proto,void * addr);
const char *(__cdecl *getBinary) (const char * name,unsigned int *size);
void (__cdecl *setBinary) (const char * name,char * value,unsigned int size);
const char *(__cdecl *getString) (const char * name);
void (__cdecl *setString) (const char * name,const char * value);
void (__cdecl *getNumber) (const char * name,double * value);
void (__cdecl *setNumber) (const char * name,double value);
unsigned long long (__cdecl *getSize64) (const char * name);
void (__cdecl *setSize64) (const char * name,unsigned long long value);
void * (__cdecl *getPointer) (const char * name);
void (__cdecl *setPointer) (const char * name,void * value);
int (__cdecl *callString) (const char * name,const char * arg);
int (__cdecl *callNumber) (const char * name,double arg);
int (__cdecl *call) (const char * name);
unsigned int(__cdecl *len)(const char * name);
} aardioParameter;
typedef double (*ADDFUNC) (double a,double b);
int func_c ( aardioParameter * opt )
{
//取参数中的字段值,字段名可以使用名字空间,例如 x.y.z.字段名
const char * s = opt->getString("hello");
io_printf( "Hello! 我是C语言代码\n收到aardio传来的参数:%s\n", s );
//调用参数中包含的函数名
opt->callString("func","参数");
//可以添加C函数为 aardio 函数
opt->setFunction("test.printf","void(string s,int x,int y)",printf);
//也以声明aardio中的函数为C函数
int (*add) (int a,int b) = opt->getFunction("test.add","int(int,int)" );
int c = (*add)(12,3);
unsigned long long x = opt->getSize64("size" );
io_printf( " LONG64: %I64u\n", x);
return 0;
}
****/
//创建结构化参数
import console;
import raw.cdeclParameter;
var cdeclParameter = raw.cdeclParameter(
size = ..math.size64(2,1);
hello = "测试!";
func = function(参数){
..console.log("aardio函数被回调了",参数 )
}
test = {
add = function(a,b){
owner.printf( '在aardio中调用C语言声明的函数 %d %d\n',12,33 );
return a+b
}
}
)
//获取C函数
func_c = c.getCdecl("func_c","int(struct msg)")
//调用C函数
func_c( cdeclParameter )
//关闭C语言编译器
c.close();
console.pause();
Markdown 格式