|
|
|
VB6的控件太老了,还是别用了,调用API写个服务端也就几句代码。 |
求教一个问题。如果一个COM接收传址的变量。怎样的才能正确表达呢? |
0ximi 发表于 2017-11-28 22:40 具体什么传址的变量,你上面那代码估计好几百句,关键是乱,我可没时间仔细看。 |
SckHandler.getData(strData) 的 strData
|
定义为raw.buff()如何? 一般这样需要被修改的变量,我在c里都是定义为指针,所以在aar里一般用raw.buff或者你可以直接用{byte xx}这种形式.. 抱歉,水平有限, 你代码我也没看懂...胡言乱语... |
C里函数的参数有小鸟&,没小鸟之分,在这儿也试下吧。![]() |
0ximi 发表于 2017-11-29 15:00 不要想复杂了, 在aardio里输出参数都是在返回值里返回,多个输出参数就是多个返回值。 但实际上你这个函数,只有一个输出参数,所以他其实就是一个普通的函数返回值。 var buffer = SckHandler.getData(); 这样写就行了。这样是返回一个buffer类型,在aardio中基本可以当字符串用, 如果你要返回字符串类型,在第二个参数里指定返回类型, var str = SckHandler.getData(,8/*_VT_BSTR*/); |
谢谢,VB6的MSWinsock.ocx 这个COM组件 var strData = SckHandler.getData(,8/*_VT_BSTR*/); 达到了目的获得字符串类型。 var strData = SckHandler.getData(); 也达到了获取 buffer的目的。 try...catch 到这 buffer。 Err: {Line}:#37 {File}:[string "import win.ui;..."]: ---------------------- {Attempt to}:concatenate {Kind}:variable(local) {Name}:'strData' {Type}:buffer |
//我原本考虑到假如有个dealCom方法的Com组件的功能已经被封装为类似下面的样子,x和y是传址的参数。 var dealCom =function(x,y){ //x和y是传址的参数。 var sign1 = "合格"; var sign2 = "不合格"; console.log("dealCom收到的参数:" + x + "," + y ) ; if( string.endWith(x,"瑕疵") || string.endWith(y,"瑕疵") ){ x = x + sign2; y = y + sign2; return true; }else { x = x + sign1; y = y + sign1; return false; } } //怎么将Com组件的dealCom方法 用传址的参数 ,有返回值。方法完成后参数也发生相应的变化。 import console; import com; mytestCom = com.CreateObject("mytestCom"); var a ={'产品头';'产品头';'产品头瑕疵';'产品头';'产品头'}; var b ={'产品尾';'产品尾';'产品尾';'产品尾瑕疵';'产品尾'}; for(i=1;5;1){ if( mytestCom.dealCom( a[i], b[i]) ){ console.log("不合格批次:" + i + " 贴了标签后:" + a[i] + " 、" + b[i] ); }else { console.log("合格批次: " + i + " 贴了标签后:" + a[i] + " 、" + b[i] ); } } console.pause(true); //按照aardio使用手册中有段关于纯函数的说法“aardio的函数只有输入参数,没有输出参数,不能在函数体中改变实参的数据。” //假如这样对COM组件的方法使用的话,就会被aardio先理解为纯函数,进而参数不会发生变化,甚至出错。 //所以我会放弃使用这种类型的 COM组件。 |
0ximi 发表于 2017-11-29 23:52 VB的这个getData() 函数,他默认返回的是二进制的 buffer, buffer在aardio里跟字符串差不多,可以在几乎所有字符串函数里使用。 但是 buffer 不能用来跟字符串连接。 你可以用 raw.tostring() 先转为真正的字符串, 这些是aardio基础的语法,你自己再研究一下。 SckHandler.getData(,8/*_VT_BSTR*/); 他这个第二个参数,可以指定返回值的类型,你可以返回字符串。 你要做HTTP服务器,用 wsock.tcp.server,或者 wsock.tcp.simpleHttpServer 不是都可以么。 这个VB6的控件都1998年的东西了,服务端也不需要这种消息异步的方式,尤其是HTTP服务器这些用异步的写法会更加麻烦。 |
0ximi 发表于 2017-11-30 00:01 好好看一下前面的答案, 前面的getData() 函数已经回答过你相同的问题。 COM控件,或API函数的这些输出参数, 都可以在返回值中接收对应参数的输出值。 var x,y = dealCom(x,y ) 如果dealCom 自己有返回值,就要写成: var ret,x,y = dealCom(x,y ) |
我昨天改进了一下文档,参考:基础语法->使用函数参数->输出参数 http://bbs.aardio.com/doc/reference/the%20language/function/parameter.html 其实在帮助文档很多章节都有提到这种用法, 在aardio里并不是没有输出参数,只是你要明确的接收对应参数的返回值。 |
手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )
GMT+8, 2018-4-24 03:20 , Processed in 0.078130 second(s), 18 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.