城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

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

12月4日 老巫婆投稿
  aardio支持混入很多不同的编程语言,代码简单,生成的软件体积也很小。下面看示例。
  aardio直接调用系统API函数(支持回调、相互调用):varret,point::User32。GetCursorPos({})
  aardioJavaScript相互调用(支持ES6):importweb。varvmweb。script(ES6)导出aardio函数到JavaScriptvm。external{logfunction(。。。){console。log(。。。)}}vm。scriptfunctionTestFunction(a,b){}varretvm。script。TestFunction(2,3);
  在aardio中调用Python(Python调用aardio同样简单,参考aardio自带范例),简单得就像在Python中使用Python:importpy3;导入Python模块。varitertoolspy3。import(itertools)调用Python函数,支持纯aardio类型参数varpermutationsitertools。permutations({a,b,c});调用Python内置函数listvarpyListpy3。list(permutations);遍历Python对象成员for(iteminpyList。each()){console。log(item);像aardio对象一样使用Python对象}console。pause();
  aardio直接调用。NetC组件(支持相互调用,支持委托这些)importwin。varwinformwin。form(textDataGridView)importSystem。DvartabSystem。Data。DataTable(DT);tab。Columns。Add(名称);tab。Rows。Add({WangWu});importSystem。Windows。FvargridSystem。Windows。Forms。CreateEmbed(DataGridView,winform);grid。ColumnHeadersHeightSizeMode2;grid。DataSourceSystem。Data。DataView(tab);winform。show();win。loopMessage();
  aardio直接调用Java(也支持相互调用)varjvmjava();加载Java类对象HelloworldAppjvm。import(aardio。sample。HelloworldApp);也可以如下自内存或文件直接加载类,HelloworldAppjvm。import(aardio。sample。HelloworldApp,34;javaaardiosampleHelloworldApp。class);用Java类创建Java对象varhelloworldHelloworldApp();直接调用Java对象的方法varresulthelloworld。test(3);
  用aardio编译C语言代码生成DLL执行文件,再调用DLL中的C函数:编译DLLtcc。build(start。dll)。codeincludewindows。hdeclspec(dllexport)intAdd(inta,intb){}加载DLLvardllraw。loadDll(start。dll,,cdecl);调用C函数varresultdll。Add(12,3);
  在aardio中嵌入并调用批处理:importconsoleimportprocess。批处理for遍历并拆分字符串varbatprocess。batch(echooffforiin(abc,def,xyz)doechoi)console。log(bat。read(1))console。pause()
  aardio调用Rust语言解析TOML:importstring。varstrstring。toml。stringify({abc123,d{1,2,3}});console。log(str);importprocess。process。code(libstringoml。res);console。pause(true);
  在aardio里嵌入PHP,以下短短几句代码,包含了HTTP服务器,PHP服务端,嵌入的浏览器组件:importwin。DSG{{varwinformwin。form(textHelloWorldPHPCGI服务器)}}varcodehtmlheadmetacharsetutf8titlePHP测试?phpechopHelloWorldPHPCGI服务器;?bodyhtmlstring。save(test。php,code);importphp。simpleHttpSvarurlphp。simpleHttpServer。startUrl(test。php);importweb。varwbweb。form(winform);wb。go(url);winform。show();win。loopMessage();
  aardio调用PowerShell,并且在PowerShell中调用aardio。这甚至都不用带上体积较大的System。Management。Automation。dll,一个轻巧的EXE就可以搞定一切,向下兼容到PowerShell2。0:importdotNet。varpScript声明PowerShell参数param(win)修改aardio对象属性win。titlePowerS调用aardio对象函数win。msgbox(这是PowerShell调用aardio打开的对话框。)dotNet。ps(pScript,{将aardio对象作为参数传给PowerShell});
  aardio执行Ruby语言代码:importwin。DSG{{varwinformwin。form(text执行Ruby代码)winform。add(edit{left26;top16;right737;bottom435;multiline1;z1})}}importprocess。varoutprocess。ruby。exec(puts测试UTF8)winform。edit。print(out);varoutprocess。ruby。eval(〔1,2,{name:tanaka,age:19}〕)winform。edit。print(out);winform。show();win。loopMessage();
  aardio调用Node。js:importnodeJs;varjsconsole。log(process。argv);varstartEnvironrequire(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获取。varprcsnodeJs。exec(js,args11,args21);prcs。logResponse();console。pause(true);
  aardio调用Fortran(DLL源码在aardio范例里有):importconsole加载DLL,DLL路径前加实现内存加载DLL(发布后不需要外部DLL文件)vardllraw。loadDll(34;fortran。dll,,cdecl);不声明直接调用,结构体默认传址,这不用改什么。varcdll。testMODaddbypoint({intx22;inty3;})console。log(c);可以先声明一下,参数类型加上声明为按引用传址(指针)varadddll。api(testMODadd,int(inta,intb))varcadd(33,2);Fortran的数值参数默认都是传址(传指针)不声明直接调用可以用结构体取代指针varcdll。testMODadd({inta33},{intb2});用raw。int创建传址数值也可以varcdll。testMODadd(raw。int(33,true),raw。int(2,true));参数声明为传值时调用更简单,不声明调用时数值默认为int类型varcdll。testMODaddbyval(33,2,raw。double(123));console。log(c);字符串只读字符串,改用raw。buffer创建可读写字节数组dll。testMODhello(str,str);注意到字符串长度传过去console。pause(true);
  aardio调用C:importvc6;console。open();varvcvc6()输入C源码vc。cppincludewindows。hstructTestInfo{BYTEname〔256〕;};classCTestObject{public:注意函数声明前加上virtual以支持aardio中的raw。interfacevirtualvoidgetName(charbuffer,intlen);virtualvoidgetInfo(TestInfopInfo);};voidCTestObject::getName(charbuffer,intlen){strcpy(buffer,测试);}voidCTestObject::getInfo(TestInfopInfo){pInfox1;pInfoy2;strcpy((char)pInfoname,测试);}externCdeclspec(dllexport)CTestObjectcdeclCreateTestObject(){returnnewCTestObject();}externCdeclspec(dllexport)voidcdeclDeleteTestObject(CTestObjectpTest){deletepT}编译生成DLLvc。exec(cl。cpp,W3警告等级,MD使用多线程动态运行库,O2OtEHsc代码优化选项,DWIN32DWINDOWSDMBCSDUSRDLL定义常数和宏,I。INCLUDE指定头文件目录,kernel32。libuser32。libgdi32。libwinspool。libcomdlg32。libadvapi32。libshell32。libole32。liboleaut32。libuuid。libodbc32。libodbccp32。lib导入库,linkSUBSYSTEM:WINDOWSMACHINE:X86后面是链接参数,out:test。dll输出文件名,dll输出DLL,LIBPATH:。LIBLIBPATH:。LIB2指定库目录)vardllraw。loadDll(test。dll,,cdecl);importraw。classtestObject{ctor(){创建C对象,并获取指针,注意这里使用了P尾标获取指针。varpTestdll。CreateTestObjectP();C对象指针转换为aardio对象。this。。raw。interface(pTest,voidgetName(stringbuffer,intlen);voidgetInfo(structpInfo);,thiscall注意调用约定为thiscall)添加析构函数。。table。gc(this,delete)};deletefunction(){if(!owner。deleted){dll。DeleteTestObject(owner);owner。}};}创建对象varobjtestObject();调用C函数varnameobj。getName(25,25);console。log(name);调用C函数varinfoobj。getInfo({BYTEname〔256〕})console。log(info。name);console。pause();
  aardio调用FreeBASIC(DLL源码在aardio范例里有):加载DLL,DLL路径前面加上表示把DLL嵌入到程序中并通过内存加载vardllraw。loadDll(34;basic。dll,,cdecl注意参数里指定使用cdecl调用约定。);定义结构体,当然也可以先声明一个class来创建实例。varinfo{INTy;}然后直接调用APIvarretdll。msgboxW(123,456,测试一下好用不好用,info);最后打印结构体看一下值console。log(ret);console。dumpJson(info);console。pause();
  aardio调用Delphi(DLL源码在aardio范例里有):importwin。内存加载DLLvardelphiDllraw。loadDll(34;Project1。dll);classwin。ui。ctrl。delphiForm{ctor(parent,tParam){this。hwnddelphiDll。CreateForm(parent。hwnd);};。。win。ui。ctrl。metaProperty()}DSG{{varwinformwin。form(text用Delphi语言为aardio编写控件;right507;bottom423;bgcolor11842740)winform。add(custom{clsdelphiFtext嵌入Delphi控件;left17;top28;right490;bottom211;db1;dl1;dr1;dt1;z1};edit{text请先用Delphi打开此目录下的DLL源码工程编译生成Project1。left16;top228;right489;bottom398;edge1;multiline1;z2})}}importweb。winform。onTestfunction(delphiStructParam){winform。edit。print(Delphi调用了aardio函数,参数如下:);winform。edit。print(delphiStructParam);delphiStructParam。x90;可选返回修改后的结构体returndelphiStructP}winform。edit。winform。show();win。loopMessage();
  aardio调用R语言:importprocess。r;执行R代码,支持aardio模板语法process。r。codewrite(?这是aardio代码?,file。data。txt);执行R代码,支持aardio模板语法varoutprocess。r。loadcode(write(?这是aardio代码?,file。data。txt);)执行纯R代码,参数1可以指定R代码或R文件。varoutprocess。r。exec(argscommandArgs(T);write(args〔1〕,file。data。txt);list有点像aardio中的表(table),可以包含各种数据类型,alist(hello1,world字符串)相当于aardio中的等号,R的等号一般用于分隔键值对print(a〔〔world〕〕);aardio里的直接下标也是这么写print(aworld);相当于aardio里的a。worldprint(a〔1〕);这个返回的是键值对hello1,不像aadio中a〔1〕与a。hello是指向不同的元素。print(mode(a〔1〕));数据类型还是显示为listbTRUE布尔值必须全大写print(b)向量ac(10,20,30,40,50)print(a〔1〕)起始下标为1,这跟aardio一样print(a〔1:4〕)取出第1项到第4项定义函数,与aardio语法类似new。functionfunction(a,b,c){resultabc类似aardio中的returnabcprint(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。cnCRAN);不会重复安装varoutprocess。r。exec(library(rjson)载入rjson包argscommandArgs(T);tabfromJSON(args〔1〕,simplifyFALSE);不要用print,cat不会加一堆不必要的东西cat(toJSON(tab)),{name1测试一下,传对象给R语言;name2这是一个aardio对象})console。dump(out);varrCodetestabcfunction(a,b,c){resultabc类似aardio中的returnabcprint(result)指定返回值以后,还能继续执行后面的代码,不像aardio函数return后面的代码被忽略。}启动Rvarrprocess。r。startRpc(rCode);调用R函数varretr。testabc(2,3,1)打印R函数返回值if(ret〔〔result〕〕){console。log(R函数返回值,ret〔〔result〕〕)}console。pause(true);
  aardio调用Julia:调用Julia函数varretjulia。sqrt(2);console。log(ret);导入Julia模块julia。using(Base64);vardatajulia。Base64。base64encode(测试一下);console。log(data);转换Julia数据类型varbufjulia。value。build(raw。buffer(abc));console。log(julia。typeof(buf));执行Julia代码并获取返回值varrefsjulia。eval(refsIdDict();查看Julia代码错误console。log(julia。lasterr());console。pause();
  aardio调用Nim语言:varnimCode{。pragma:rtl,exportc,dynlib,cdecl。}importmd5Nim双引号中的字符串,相当于aardio中用单引号包含的转义字符串aardio中双引号包含的字符串,相当于Nim中的原始字符串:r原始字符串Nim与aardio都是UTF8编码,aardio的文本字符串在Nim中的类型为cstringNim中string可以隐式转换为cstring,cstring加上转为string类型procbuild(str:cstring,num:ptr〔cint〕):cstring{。rtl。}num〔〕num〔〕2resultmd5。getMD5(str)string。save(test。nim,nimCode)importprocess。process。nim(capp:libd:releasertest。nim)支持改为34;test。dll内存加载DLL,但这时候test。dll还未生成,所以示例里没有加用cdecl调用约定的好处是:导出函数名直接可用,不会被加上修饰名vartestraw。loadDll(test。dll,,cdecl)nim与aardio的字符串都是UTF8编码,UTF8真是到处通行,非常方便省了很多事varbuildtest。api(build,str(str,intnum))一般C语言不能这么直接返回字符串(要考虑谁释放内存)。但是nim可以投机取巧一下,nim会自动回收内存,而这时候还来不及回收。varstr,numbuild(测试abc,9)console。log(str,num)用aardio算出MD5对比一下,结果一模一样console。log(crypt。md5(测试abc,false))console。pause();
  aardio调用V语言:importprocess。v;console。open();V语言不支持中文路径,所以工程目录路径不要包含任何中文string。save(hello。v,structPoint{pubmut:声明下面的字段公开、可变xintyint}〔export:add〕一定要用这句指定DLL导出函数名pubfnadd(aint,bint,mutptPoint)int{pt。xabreturnab})V语言是翻译成C语言然后生成DLL,生成的DLL依赖VC运行库,试了换成调用TCC编译,10KB的DLL增大到400KB,并且运行崩溃。process。v。shared(hello。v)。waitOne();V生成的DLL建议至少在WIN10上用,需要VC2017运行库importsys。vc14;sys。vc14。require();检测并自动安装VC运行库导入DLL,注意要指定cdecl调用约定vardllraw。loadDll(hello。dll,,cdecl)调用V函数(V是翻译为C语言,所以参考C语言的规则)varn,ptdll。add(12,3,{intx1;inty2});输出结果console。log(n);console。dumpJson(pt);console。pause(true);
投诉 评论 转载

这款中式恐怖游戏,让你细品恐怖爱情故事阴阳紅白,比鬼神更可怕的是人心近日,《纸嫁衣》第一部在STEAM上架后,获得特别好评。《纸嫁衣》由独立游戏团队心动互娱开发,用中式恐怖包装凄美爱情故事,基底是迷信造……一花一祝福,五一劳动节,鲜花送美好,劳动最光荣,幸福好生活一花一世界,一叶一欢喜。一花一祝福,五一劳动节,鲜花送美好,劳动最光荣,幸福好生活。一花一祝福,五一劳动节;花儿朵朵俏,阳光灿烂照;祝福信息到,快乐好心情。五一劳动……比尔盖茨为何连续斩获17年世界首富?看完他的56条思考我才理提到比尔盖茨,你会想到什么?电脑神童、哈佛最杰出的辍学生?还是微软帝国的创建者、最慷慨的慈善家、世界首富?他就像一个神话,也是一个难以评价的人物。比尔盖茨成为……1989年,广东老人随手拍了照片获利5000元,25年后竟要(一)1989年,一名来自广东省的老人来到四川乐山大佛旅游,他和其他游客一样,喜欢在各个景点拍照留念。乐山大佛但让人意想不到的是,老人随手拍摄的一张照片,竟让……美国房价通货膨胀太夸张,NBA冠军成员竟吐槽租不起房子勇士新援唐特迪温琴佐早些时候参加DamonAndRatto节目。迪温琴佐透露,他已经跟史蒂夫科尔进行沟通,但谈的不是关于他的角色。他说:我们进行了沟通,但是更多的是关于我……恐龙并未真正灭绝?他们的后代随处可见恐龙曾经在相当长的一段时间里统治着地球,那时候,地球各处都生存着这种大块头,想必地球都被这些生命踩得一颤一颤的。虽然恐龙的战斗力很强,基本没有什么天敌,但它们也逃不过大自……日本天皇杯鹿岛鹿角vs大阪钢巴7月13日1800日皇杯18决赛将会展开比赛争夺本场比赛鹿岛鹿角vs大阪钢巴。本场比赛的焦点在于:联赛发挥出色的鹿岛鹿角本场比赛能否延续良好状态获得比赛胜利?精选为您带来本场比赛的深度剖析。……各编程语言相互调用示例,代码简单,生成的软件体积也很小aardio支持混入很多不同的编程语言,代码简单,生成的软件体积也很小。下面看示例。aardio直接调用系统API函数(支持回调、相互调用):varret,point::……生涯首进大满贯决赛!贾巴尔三盘险胜大黑马,豪夺11连胜创造纪北京时间7月7日,温网女单半决赛展开争夺,赛会3号种子贾巴尔同德国选手玛利亚相遇。经过了三盘比赛的较量,贾巴尔以623661战胜了对手,本赛季至今草地11战全胜,职业生涯首次闯……自然中国开始搜寻地球2。0《自然》杂志在4月12日发表了一篇名为《中国开始搜寻地球2。0》(ChinaishatchingaplantofindEarth2。0)的报道:下面是报道内容的节选:……官宣!再见!结束了!湖人再也没有瓜哥了自从自由市场开启后,湖人表现得非常活跃,一口气连续签下四名球员。先是签下2年合同签下达米安琼斯,然后又以1年650万大合同拿下原马刺球员朗尼沃克,最后分别再拿下特洛伊布朗……宽带升级了,为啥网速却上不去?近年来,居民家用宽带速度不断提升,从50Mbps到100Mbps,再到200Mbps以上的光纤宽带。有时宽带明明没问题,甚至是刚升级了套餐,网速却还是不令人如意,别着急,……
情感攻略别相信男人的我养你那是害了你自己长相守每周几几点更新继电器是什么继电器有什么作用妈妈的爱记忆中的年味儿校车标牌到期了要怎么换领觅得造句用觅得造句大全地球上的磁场,让人类不受太阳风的伤害!月球上是否存在磁场呢?华为举办夏季发布会,nova10系列等新品惊喜亮相亏损25亿的快递柜,开始洗衣服了新常态下做好本单位稳定工作的对策NBA火爆!58次犯规创纪录,68次罚球,一场比赛足足打了3

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁