范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

各编程语言相互调用示例,代码简单,生成的软件体积也很小

  aardio 支持混入很多不同的编程语言,代码简单,生成的软件体积也很小。下面看示例。
  aardio 直接调用系统 API 函数( 支持回调、相互调用 ): var ret,point = ::User32.GetCursorPos({   int x;   int y; })
  aardio / JavaScript 相互调用( 支持 ES6 ): import web.script; var vm = web.script("ES6")  //导出 aardio 函数到 JavaScript vm.external = { 	log = function(...){   		console.log(...) 	}  }  vm.script = /***** function TestFunction(a,b) {  	return a + b; } *****/  var ret = vm.script.TestFunction(2,3);
  在 aardio 中调用 Python( Python 调用 aardio 同样简单,参考 aardio 自带范例),简单得就像在 Python 中使用 Python: import console; import py3;   //导入 Python 模块。 var itertools = py3.import("itertools")  //调用 Python 函数,支持纯 aardio 类型参数 var permutations = itertools.permutations({"a","b","c"});  //调用 Python 内置函数 list var pyList = py3.list(permutations);  //遍历 Python 对象成员 for( item in pyList.each() ){   console.log(item); //像 aardio 对象一样使用 Python 对象 }  console.pause();
  aardio 直接调用 .Net / C# 组件( 支持相互调用,支持委托这些) import win.ui;  var winform = win.form(text="DataGridView")  import System.Data; var tab = System.Data.DataTable("DT");  tab.Columns.Add("名称");  tab.Rows.Add({"WangWu"});   import System.Windows.Forms; var grid = System.Windows.Forms.CreateEmbed("DataGridView",winform);  grid.ColumnHeadersHeightSizeMode = 2;  grid.DataSource = System.Data.DataView(tab);     winform.show(); win.loopMessage();
  aardio 直接调用 Java ( 也支持相互调用 ) import java;  var jvm = java();   //加载Java类对象 HelloworldApp = jvm.import("aardio.sample.HelloworldApp");  //也可以如下自内存或文件直接加载类, HelloworldApp = jvm.import("aardio.sample.HelloworldApp",#34;javaaardiosampleHelloworldApp.class");  //用 Java 类创建 Java 对象 var helloworld = HelloworldApp();  //直接调用 Java 对象的方法  var result = helloworld.test(3);
  用 aardio 编译 C 语言代码生成 DLL 执行文件,再调用 DLL 中的 C 函数: import tcc;   //编译 DLL tcc.build( "/start.dll" ).code = /*** #include   __declspec(dllexport) int Add( int a,int b )  {        return a + b; }  ***/  //加载 DLL var dll = raw.loadDll( "/start.dll",,"cdecl" ); //调用 C函数 var result = dll.Add(12,3);
  在 aardio 中嵌入并调用批处理: import console import process.batch;  //批处理 for 遍历并拆分字符串 var bat = process.batch(` @echo off  for %%i in (abc,def,xyz) do echo %%i `) console.log(bat.read(-1))   console.pause()
  aardio 调用 Rust 语言解析 TOML: import console;  import string.toml;  var str = string.toml.stringify({abc=123,d={1,2,3}}); console.log( str );  import process.code; process.code("~libstring	oml.res"); console.pause(true);
  在 aardio 里嵌入 PHP,以下短短几句代码,包含了 HTTP 服务器,PHP服务端,嵌入的浏览器组件: import win.ui; /*DSG{{*/ var winform = win.form(text="Hello World / PHP_CGI 服务器") /*}}*/  var code = /*     PHP 测试   <?php echo "

Hello World / PHP_CGI 服务器"; ?> */ string.save("/test.php",code); import php.simpleHttpServer; var url = php.simpleHttpServer.startUrl("/test.php"); import web.form; var wb = web.form(winform); wb.go(url); winform.show(); win.loopMessage();   aardio 调用 PowerShell,并且在 PowerShell 中调用 aardio。这甚至都不用带上体积较大的 System.Management.Automation.dll,一个轻巧的 EXE 就可以搞定一切,向下兼容到 PowerShell 2.0 : import dotNet.ps; var pScript = /* # 声明 PowerShell 参数 param($win) # 修改 aardio 对象属性 $win.title = "PowerShell + aardio"; # 调用 aardio 对象函数 $win.msgbox("这是 PowerShell 调用 aardio 打开的对话框。") */ import win; dotNet.ps(pScript,{ win = win; //# 将 aardio 对象作为参数传给 PowerShell });   aardio 执行 Ruby 语言代码 : import win.ui; /*DSG{{*/ var winform = win.form(text="执行Ruby代码") winform.add( edit={cls="edit";left=26;top=16;right=737;bottom=435;multiline=1;z=1} ) /*}}*/ import process.ruby; var out = process.ruby.exec("puts "测试UTF-8"") winform.edit.print(out); var out = process.ruby.eval(`[1, 2, { name: "tanaka", age: 19 }]`) winform.edit.print(out); winform.show(); win.loopMessage();   aardio 调用 Node.js : import console; import nodeJs; var js = /****** console.log(process.argv); var startEnviron = require("startEnviron"); console.log(startEnviron.dest); ******/ //自动分析 JS 代码中的 require 语句并安装依赖模块 nodeJs.requireByJs(js); //把对象传给 node.js,在 JS 代码中用 require("startEnviron") 获取。 nodeJs.startEnviron({ src:"传个字符串",dest:{test:"嵌套的对象表,传给node.js都没问题",number:123, arr:{1,2,3} } }) //执行JS,这里指定的启动参数在 JS 代码中可用 process.argv 获取。 var prcs = nodeJs.exec(js,"--args1=1","--args2=1"); prcs.logResponse(); console.pause(true);   aardio 调用 Fortran ( DLL 源码在 aardio 范例里有 ) : import console //加载 DLL , DLL 路径前加 $ 实现内存加载 DLL(发布后不需要外部 DLL 文件) var dll = raw.loadDll(#34;/fortran.dll",,"cdecl"); //不声明直接调用,结构体默认传址,这不用改什么。 var c = dll.__test_MOD_addbypoint({ int x = 22; int y = 3; }) console.log(c); //可以先声明一下,参数类型加上&声明为按引用传址(指针) 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); //注意到字符串长度传过去 console.pause(true);   aardio 调用 C++ : import vc6; import console; console.open(); var vc = vc6( "/" ) //输入C++源码 vc.cpp = /****** #include struct TestInfo{ int x; int y; BYTE name[256]; }; class CTestObject { public: //注意函数声明前加上 virtual 以支持 aardio 中的 raw.interface virtual void getName(char *buffer,int len); virtual void getInfo(TestInfo *pInfo); }; void CTestObject::getName(char *buffer,int len){ strcpy(buffer,"测试"); } void CTestObject::getInfo(TestInfo *pInfo){ pInfo->x = 1; pInfo->y = 2; strcpy((char *)pInfo->name,"测试"); } extern "C" __declspec(dllexport) CTestObject* __cdecl CreateTestObject() { return new CTestObject(); } extern "C" __declspec(dllexport) void __cdecl DeleteTestObject( CTestObject* pTest) { delete pTest; } ******/ //编译生成DLL vc.exec( "cl *.cpp" ,"/W3" /*警告等级*/ ,"/MD" /*使用多线程动态运行库*/ ,"/O2 /Ot /EHsc" /*代码优化选项*/ ,"/D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"" /*定义常数和宏*/ ,"/I"./INCLUDE""/*指定头文件目录*/ ,"kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib" /*导入库*/ ,"/link /SUBSYSTEM:WINDOWS /MACHINE:X86" /*后面是链接参数 */ ,"/out:test.dll"/*输出文件名*/ ,"/dll" /*输出DLL*/ ,"/LIBPATH:".LIB" /LIBPATH:".LIB2"" /*指定库目录*/ ) var dll = raw.loadDll("/test.dll",,"cdecl"); import raw.interface; class testObject{ ctor(){ //创建 C++ 对象,并获取指针,注意这里使用了 P 尾标获取指针。 var pTest = dll.CreateTestObjectP(); //C++ 对象指针转换为 aardio 对象。 this = ..raw.interface( pTest," void getName(string &buffer,int len); void getInfo(struct &pInfo); ","thiscall" //注意调用约定为thiscall ) //添加析构函数 ..table.gc(this,"delete") }; delete = function(){ if(!owner.deleted){ dll.DeleteTestObject( owner ); owner.deleted = true; } }; } //创建对象 var obj = testObject(); //调用 C++ 函数 var name = obj.getName(25,25); console.log(name); //调用 C++ 函数 var info = obj.getInfo({ int x;int y;BYTE name[256]}) console.log( info.name ); console.pause();   aardio 调用 FreeBASIC ( DLL 源码在 aardio 范例里有 ) : //加载DLL,DLL路径前面加上$表示把DLL嵌入到程序中并通过内存加载 var dll = raw.loadDll( #34;basic.dll",,"cdecl" //注意参数里指定使用 cdecl 调用约定。 ); //定义结构体,当然也可以先声明一个 class 来创建实例。 var info = { int x; INT y; } // 然后直接调用 API var ret = dll.msgboxW(123,456,"测试一下好用不好用",info); //最后打印结构体看一下值 import console; console.log(ret); console.dumpJson(info); console.pause();   aardio 调用 Delphi ( DLL 源码在 aardio 范例里有) : import win.ui; //内存加载 DLL var delphiDll = raw.loadDll(#34;Project1.dll"); class win.ui.ctrl.delphiForm{ ctor(parent,tParam){ 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 web.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();   aardio 调用 R 语言: import console; import process.r; //执行 R 代码,支持 aardio 模板语法 process.r.code = /* write("<?="这是 aardio 代码"?>",file=".data.txt"); */ //执行 R 代码,支持 aardio 模板语法 var out = process.r.loadcode(`write("<?="这是 aardio 代码"?>",file=".data.txt");`) //执行纯 R 代码,参数 @1 可以指定 R代码或 R 文件。 var out = process.r.exec(` args=commandArgs(T); write(args[1],file=".data.txt"); # list 有点像 aardio 中的表(table),可以包含各种数据类型, a <- list(hello = 1, world = "字符串" ) # <- 相当于 aardio 中的等号, R的等号一般用于分隔键值对 print ( a[["world"]] ); # aardio 里的直接下标也是这么写 print ( a$world ); # 相当于 aardio 里的 a.world print ( a[1] ); # 这个返回的是键值对 hello = 1,不像 aadio 中 a[1] 与 a.hello 是指向不同的元素。 print ( mode(a[1]) ); # 数据类型还是显示为 list b <- TRUE #布尔值必须全大写 print( b ) # 向量 a = c(10, 20, 30, 40, 50) print( a[1] ) #起始下标为 1 ,这跟 aardio 一样 print( a[1:4] ) # 取出第 1 项到第 4 项 # 定义函数,与 aardio 语法类似 new.function <- function(a,b,c) { result <- a * b + c # 类似 aardio 中的 return a * b + c # print(result) # 指定返回值以后,还能继续执行后面的代码,不像 aardio 函数 return 后面的代码被忽略。 } print( new.function(2,3,1) ) `,"测试一下"); //可以添加不定个数的启动参数 console.log( out ); console.more(,true); console.showLoading(" 正在安装 rjson 包"); process.r.require("rjson","https://mirrors.ustc.edu.cn/CRAN/");//不会重复安装 var out = process.r.exec( ` library("rjson") # 载入 rjson 包 args <- commandArgs(T); tab <- fromJSON(args[1], simplify=FALSE); #不要用 print ,cat 不会加一堆不必要的东西 cat( toJSON(tab) ) `, { name1 = "测试一下,传对象给 R 语言"; name2 = "这是一个 aardio 对象" }) console.dump(out); var rCode = /* testabc <- function(a,b,c) { result <- a * b + c # 类似 aardio 中的 return a * b + c # print(result) # 指定返回值以后,还能继续执行后面的代码,不像 aardio 函数 return 后面的代码被忽略。 } */ //启动 R var r = process.r.startRpc(rCode); //调用 R 函数 var ret = r.testabc(2,3,1) //打印 R 函数返回值 if(ret[["result"]]){ console.log("R 函数返回值",ret[["result"]]) } console.pause(true);   aardio 调用 Julia : import console; import julia; //调用 Julia 函数 var ret = julia.sqrt(2); console.log(ret); //导入 Julia 模块 julia.using("Base64"); var data = julia.Base64.base64encode("测试一下"); console.log( data ); //转换 Julia 数据类型 var buf = julia.value.build(raw.buffer("abc")); console.log(julia.typeof(buf)); //执行 Julia 代码并获取返回值 var refs = julia.eval("refs = IdDict("); //查看 Julia 代码错误 console.log(julia.lasterr()); console.pause();   aardio 调用 Nim 语言: import console; var nimCode = /* {.pragma: rtl, exportc, dynlib, cdecl.} import md5 # Nim 双引号中的字符串,相当于 aardio 中用单引号包含的转义字符串 # aardio 中双引号包含的字符串,相当于 Nim 中的原始字符串: r"原始字符串" # Nim 与 aardio 都是 UTF-8 编码,aardio 的文本字符串在 Nim 中的类型为 cstring # Nim 中 string 可以隐式转换为 cstring, cstring 加上 $ 转为 string 类型 proc build*(str: cstring, num: ptr[cint]): cstring {.rtl.} = num[] = num[] * 2 result = md5.getMD5($str) */ string.save("/test.nim",nimCode ) import process.nim; process.nim("c --app:lib -d:release -r test.nim") //支持改为 #34;/test.dll" 内存加载 DLL, //但这时候 test.dll 还未生成,所以示例里没有加 $ //用cdecl 调用约定的好处是:导出函数名直接可用,不会被加上修饰名 var test = raw.loadDll("/test.dll",,"cdecl") //nim 与 aardio 的字符串都是 UTF-8 编码,UTF-8 真是到处通行,非常方便省了很多事 var build = test.api("build","str(str,int& num)" ) //一般C语言不能这么直接返回字符串(要考虑谁释放内存)。 //但是 nim 可以投机取巧一下,nim 会自动回收内存,而这时候还来不及回收。 var str,num = build("测试abc",9) console.log(str,num) //用 aardio 算出 MD5 对比一下,结果一模一样 import crypt; console.log(crypt.md5("测试abc",false)) console.pause();   aardio 调用 V 语言: import console; import process.v; console.open(); //V语言不支持中文路径,所以工程目录路径不要包含任何中文 string.save("/hello.v"," struct Point { pub mut: //声明下面的字段公开、可变 x int y int } [export: "add"] //一定要用这句指定DLL导出函数名 pub fn add(a int,b int,mut pt &Point) int { pt.x = a+b return a+b }" ) /* V语言是翻译成C语言然后生成DLL,生成的DLL依赖 VC 运行库, 试了换成调用TCC编译,10KB的DLL增大到 400KB,并且运行崩溃。 */ process.v.shared("hello.v").waitOne(); //V生成的DLL建议至少在 WIN10 上用,需要VC++2017运行库 import sys.vc14; sys.vc14.require(); //检测并自动安装 VC++ 运行库 //导入DLL,注意要指定 cdecl 调用约定 var dll = raw.loadDll("/hello.dll",,"cdecl") //调用 V 函数( V是翻译为C语言,所以参考C语言的规则) var n,pt = dll.add(12,3,{int x=1;int y =2}); //输出结果 console.log(n); console.dumpJson(pt); console.pause(true);


9位至今未婚的内地知名男星,各有各的苦衷,看看都有谁都说一线城市的大龄单身人士特别多,随着人们物质水平的提升,如今都已经开放三胎了,但仍然有许多人选择过着孑然一身的生活。这样的人在娱乐圈里比比皆是,其中就不乏颜值高受众广实力强劲的男香港第一神童罗兆辉14岁辍学,27岁身家超过10亿,47岁去世有香港第一神童之称的罗兆辉,人生经历不可谓不传奇。他出生于1964年,因为家贫14岁就辍学了。青年罗兆辉很可能一辈子碌碌无为,日复一日地靠劳力工作糊口养家。然而,即便在底层打拼,罗深挖60岁的叶蒨文满头白发,她还是你印象中那个青春女神吗?文河西9月27日,刘德华60岁生日,3天后,他的师母香港著名歌手叶蒨文也迎来了自己的60岁生日。那一天,她不仅在微博上写下长文感言,还晒出了自己满头白发的近照,我们印象中的青春时代大衣哥儿子疑似婚变,两口子证实已分居?其实这一切早已注定10月5日,大衣哥朱之文的儿媳妇陈亚男在直播间里公开表示与丈夫朱单伟已经暂时分开了,而他也被公公朱之文接回家。时间回溯到2020年10月4日,农民歌手大衣哥朱之文儿子朱单伟结婚的消蓝洁瑛,中年发疯,55岁凄惨离世,她的故事远比你想得更残忍文叭叭热搜上世纪90年代,有香港大师指出蓝洁瑛是孤独命天生的。她未必能在人生之道找到一个伴。没想到这句话,竟是蓝洁瑛这一生的写照。说起蓝洁瑛,观众对她印象最深的就是大话西游之月光宝范冰冰近照状态好,西装马甲配红唇时髦精致,机场走出秀场的效果说起范冰冰,那可是一个当之无愧的时髦精,仅是西装这一元素,就能被她玩转多样化时尚,各种新颖的设计配合独特的搭配方式,轻松打造与众不同的时尚潮流。此次现身机场,范冰冰就选择了宽大的西转转Q3手机行情报告5G换机潮越演越热iPhone13刷爆热搜2021年三季度,国内手机市场群雄逐鹿各大品牌奋力冲高,素有晴雨表之称的二手市场又有哪些变化?10月8日,转转集团发布2021年三季度手机行情报告(以下简称Q3转转集团手机行情),想不到吧?(普京乔布斯)原来这些大佬幼时都是熊孩子中国古语说三岁看小,七岁看老。从孩子37岁的行为表现和待人处事态度中可以预测他们以后的个性特点。俄罗斯总统普京,苹果公司创始人史蒂夫乔布斯史蒂夫沃兹尼亚(乔布斯的好友兼合作伙伴,电三星交出靓丽答卷,第三季度营业利润将增长近28亚太日报暮又据法新社报道,本周五,韩国科技巨头三星电子不顾全球供应链的现状,在一份文件中预测第三季度营业利润将达到15。80万亿韩元,同比增长27。94。据彭博社报道,营业利润预期今日寒露,家长老师要留心这4点袅袅凉风动凄凄寒露零兰衰花始白荷破叶犹青今日9时39分我们迎来寒露节气这是今年第一个带寒字的节气露珠冷寒而欲凝结放出微微寒光寒露之名由此得来即将迎来秋残如血的日子草木荣华渐成往事冬广东男篮正式内部处罚胡明轩,处理结果为朱芳雨点赞因为胡明轩经纪团队的无知,让胡明轩签下了阿迪达斯这个辱华品牌的代言,令这个中国篮坛的未来巨星人气直接下滑,甚至有媒体声称胡明轩这种不爱国的行为,应该要受到中国男协禁赛处罚但是一直以
沈阳市于洪区市场局企业开办进园区,便企服务再升级来源人民网辽宁频道真的是太方便了!从办公室出来走几步就可以在园区便企服务办公室办理营业执照,不用再往大厅去跑了,十多分钟就能完成,非常快!近日,入驻沈阳市于洪区长涛健康科技小镇的企中欧班列(齐鲁号)济南集结中心3座功能楼仅用半年主体封顶济南国际物流短板正快速从开工奠基到主体封顶,只用了半年时间!这里说的是中欧班列(齐鲁号)济南集结中心一期项目的3座功能楼,济南市项目突破年威力可窥一斑。速度这么快,不会是小项目吧?可不是!济南市口岸物流平安产险三明中心支公司积极开展315消费者权益保护宣传周活动3月14日上午,由三明银保监分局指导三明市保险行业协会主办的三明市保险业315消费者权益保护宣传活动在三明市三元区职工文化广场顺利举办,本次活动主题为共筑诚信消费环境提振金融消费信最近用十年前的iPhone5S不得不说经典永远是经典最近用十年前的iPhone5S。不得不说。经典永远是经典。说到iPhone5S这一部手机,对于每个人水果粉丝都是一个具有历史意义的手机,也是众多水果粉丝的启蒙手机。iPhone5s资讯什么是特许经营ABO模式?ABO模式是指在当地政府的授权下,由开发建设主管部门将区域土地整理基础建设投资促进和经济发展等社会公共服务职能,授权和委托至成功转型平台公司或社会资本方企业,并以特许经营形式加以实3月19大满贯赛赛程!黄金时间迎两场决赛,超级黑马大战孙颖莎WTT新加坡大满贯赛,在3月18日倒数第二个比赛日,随着马龙在半决赛41击败雨果,国乒男单也提前包揽了冠亚军,从而包揽了本届大满贯赛的五块金牌。男单半决赛中,樊振东41击败王楚钦,巴塞罗那VS皇家马德里西甲大战拉开帷幕,主队志在取胜文章引自公众号玉溪侃球主队目前雄居第一,客队已经落后九分,球队客场难以拿到分数在3月20日凌晨4点整,西班牙甲级联赛的一场焦点大战将会准时开战,而这一场比赛的双方将会是这个联赛当中做时间的规划师科比在成为顶级球星的时候,有记者采访他当时记者问你为什么能如此成功呢?令人意外的是,科比反问你知道洛杉矶凌晨四点钟是什么样子吗?记者摇摇头不知道,那你说说洛杉矶每天早上四点钟究竟什中国足球再次地震!8名参与赌球球员被带走,国足主力金敬道在列中国足球再次掀起大地震,8名参与打假球事件的球员被带走,包括国足主力球员金敬道。这次事件再次彰显了中国足协反腐力度之大,也让更多人敢于揭露足坛黑幕。据报道,北京时间3月17日下午1WTT深度观察三年了,在刘国梁领导下,当初的目标实现了吗?乒乓球,作为国球,在国人心中的位置无可替代!容国团,1959年,在多特蒙德,成为了新中国第一个世界冠军。让全世界看到了一个正在崛起的东方大国,在那个百废待兴的年代极大地激发了一代新没有人比我更懂腐败,国际足联前主席布拉特头条创作挑战赛2015年,国际足联召开新闻发布会,喜剧演员尼尔森闯入新闻发布会,将一把钞票扔向了时任国际足协主席布拉特身上。此时的布拉特无比厌恶这个他曾经无比喜爱的钞票。布拉特19