搜索
查看: 1653|回复: 14

调用VB6的com组件mswinsock.ocx的问题 :它的方法getData()无法得到请求数据。

[复制链接]

4

主题

24

帖子

145

积分

培训班

积分
145
发表于 2017-11-28 22:03:09 | 显示全部楼层 |阅读模式
调用VB6的com组件mswinsock.ocx的问题 :用网页浏览器访问以下服务器代码,它的方法getData()无法得到请求数据。我的字符串变量strData这样传址进这函数内是不是不对的?那又该怎么办呢?
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

4

主题

24

帖子

145

积分

培训班

积分
145
 楼主| 发表于 2017-11-28 22:03:10 | 显示全部楼层
  1. import win.ui;
  2. import com;
  3. /*DSG{{*/
  4. var winform = win.form(text="aardio form";right=759;bottom=469)
  5. winform.add(
  6. button={cls="button";text="button";left=486;top=342;right=579;bottom=383;z=4};
  7. edit={cls="edit";text="edit";left=24;top=188;right=451;bottom=306;edge=1;multiline=1;z=1};
  8. static={cls="static";text="static";left=32;top=25;right=725;bottom=163;transparent=1;z=3};
  9. txtSendData={cls="edit";left=23;top=313;right=448;bottom=449;edge=1;multiline=1;z=2}
  10. )
  11. /*}}*/
  12. winform.txtSendData.text = "服务器发送数据!!" ;
  13. Winsock1 = com.CreateObject("MSWinsock.Winsock.1");
  14.     Winsock1.Protocol = 0;// sckTCPProtocol =0 、sckUDPProtocol = 1
  15.     Winsock1.Bind(80,);
  16.     Winsock1.Listen();
  17.     winform.static.text = "start SeverName:" + Winsock1.LocalHostName  + "  start IP:" + Winsock1.LocalIP + ":" + Winsock1.LocalPort + '启动';
  18. var Winsock1Evens = {};
  19. //Connect()事件
  20. Winsock1Evens.Connect =function(){
  21.   winform.edit.text = winform.edit.text + "Connect \r\n";       
  22. }
  23. //ConnectionRequest事件
  24. Winsock1Evens.ConnectionRequest = function(requestID){

  25. winform.edit.text = winform.edit.text +   "Winsock1Evens: ConnectionRequest  " + requestID  + ' State: ' + SckHandler.State + '\r\n';
  26. if( SckHandler.State != 6 && SckHandler.State !=7 && SckHandler.State != 8){
  27.         SckHandler.Accept(requestID);
  28.         winform.edit.text = winform.edit.text + 'Accept requestID:'+ requestID + '\r\n';
  29. }
  30. }
  31. //Close()事件
  32. Winsock1Evens.Close =function(){
  33.   winform.edit.text = winform.edit.text + "Close" + '\r\n';
  34. }
  35. //SendProgress(long bytesSent, long bytesRemaining)事件
  36. Winsock1Evens.SendProgress = function( bytesSent, bytesRemaining){
  37.   winform.edit.text = winform.edit.text +  "SendProgress" + '\r\n';

  38. }
  39. //SendComplete()事件
  40. Winsock1Evens.SendComplete =function(){
  41.   winform.edit.text = winform.edit.text +   "SendComplete" + '\r\n';
  42. }
  43. com.Connect(Winsock1, Winsock1Evens);

  44. // 负责数据接收和发送的 SckHandler
  45. SckHandler =com.CreateObject("MSWinsock.Winsock.1");
  46.     SckHandler.Protocol = 0;
  47.     SckHandler.LocalPort(80);
  48.     SckHandler.Close();
  49. var SckHandlerEvens ={};
  50. SckHandlerEvens.DataArrival =function(bytesTotal){
  51.      winform.edit.text = winform.edit.text + "SckHandlerEvens : DataArrival" + bytesTotal + '\r\n' ;   
  52.      var strData ='';
  53.          try{
  54.                  /*
  55.                 
  56.                  这儿出现了问题,又测试不出故障。
  57.                 
  58.                  */
  59.                  SckHandler.getData(strData);
  60.                 
  61.                  winform.edit.text = winform.edit.text + bytesTotal + "GetData :" + strData + '\r\n';
  62.          }
  63.      catch(e){
  64.         winform.edit.text = winform.edit.text + bytesTotal + "GetData Err: " + e + '\r\n';
  65.      }         
  66.          SckHandler.SendData(winform.txtSendData.text);

  67. }
  68. //SendComplete()事件
  69. SckHandlerEvens.SendComplete =function(){   
  70.         winform.edit.text = winform.edit.text + "SckHandlerEvens : SendComplete !!"  + '\r\n';
  71.         SckHandler.Close();
  72. }

  73. com.Connect(SckHandler, SckHandlerEvens);


  74. winform.show()
  75. win.loopMessage();
复制代码
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

4

主题

24

帖子

145

积分

培训班

积分
145
 楼主| 发表于 2017-11-28 22:22:14 | 显示全部楼层
  1. 以下是查出的资料 mswinsocket.ocx的资料

  2. // Generated .IDL file (by the OLE/COM Object Viewer)
  3. //
  4. // typelib filename: MSWINSCK.OCX

  5. [
  6.   uuid(248DD890-BB45-11CF-9ABC-0080C7E7B78D),
  7.   version(1.0),
  8.   helpstring("Microsoft Winsock Control 6.0 (SP6)"),
  9.   helpfile("MSWNSK98.chm"),
  10.   helpcontext(0x00053020)
  11. ]
  12. library MSWinsockLib
  13. {
  14.     // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
  15.     importlib("stdole2.tlb");

  16.     // Forward declare all types defined in this typelib
  17.     interface IMSWinsockControl;
  18.     dispinterface DMSWinsockControlEvents;

  19.     typedef [uuid(248DD895-BB45-11CF-9ABC-0080C7E7B78D), helpstring("Protocol Constants"), helpcontext(0x0005304f)]
  20.     enum {
  21.         sckTCPProtocol = 0,
  22.         sckUDPProtocol = 1
  23.     } ProtocolConstants;

  24.     [
  25.       odl,
  26.       uuid(248DD892-BB45-11CF-9ABC-0080C7E7B78D),
  27.       helpstring("Winsock methods and events"),
  28.       helpcontext(0x00053038),
  29.       hidden,
  30.       dual,
  31.       nonextensible,
  32.       oleautomation
  33.     ]
  34.     interface IMSWinsockControl : IDispatch {
  35.         [id(0xfffffdd8), hidden]
  36.         HRESULT AboutBox();
  37.         [id(0x00000003), propget, helpstring("Returns/Sets the socket protocol"), helpcontext(0x0005303f)]
  38.         HRESULT Protocol([out, retval] ProtocolConstants* Protocol);
  39.         [id(0x00000003), propput, helpstring("Returns/Sets the socket protocol"), helpcontext(0x0005303f)]
  40.         HRESULT Protocol([in] ProtocolConstants Protocol);
  41.         [id(0x00000004), propget, helpstring("Returns the remote host IP address"), helpcontext(0x00053039)]
  42.         HRESULT RemoteHostIP([out, retval] BSTR* RemoteHostIP);
  43.         [id(0x00000005), propget, helpstring("Returns the local machine name"), helpcontext(0x0005303a)]
  44.         HRESULT LocalHostName([out, retval] BSTR* LocalHostName);
  45.         [id(0x00000006), propget, helpstring("Returns the local machine IP address"), helpcontext(0x0005303b)]
  46.         HRESULT LocalIP([out, retval] BSTR* LocalIP);
  47.         [id(0x00000007), propget, helpstring("Returns the socket handle"), helpcontext(0x0005303c)]
  48.         HRESULT SocketHandle([out, retval] long* SocketHandle);
  49.         [id(00000000), propget, hidden]
  50.         HRESULT _RemoteHost([out, retval] BSTR* RemoteHost);
  51.         [id(00000000), propput, hidden]
  52.         HRESULT _RemoteHost([in] BSTR RemoteHost);
  53.         [id(0x00000001), propget, helpstring("Returns/Sets the port to be connected to on the remote computer"), helpcontext(0x0005302c)]
  54.         HRESULT RemotePort([out, retval] long* RemotePort);
  55.         [id(0x00000001), propput, helpstring("Returns/Sets the port to be connected to on the remote computer"), helpcontext(0x0005302c)]
  56.         HRESULT RemotePort([in] long RemotePort);
  57.         [id(0x00000002), propget, helpstring("Returns/Sets the port used on the local computer"), helpcontext(0x0005302d)]
  58.         HRESULT LocalPort([out, retval] long* LocalPort);
  59.         [id(0x00000002), propput, helpstring("Returns/Sets the port used on the local computer"), helpcontext(0x0005302d)]
  60.         HRESULT LocalPort([in] long LocalPort);
  61.         [id(0x00000008), propget, helpstring("Returns the state of the socket connection"), helpcontext(0x0005302e)]
  62.         HRESULT State([out, retval] short* State);
  63.         [id(0x00000009), propget, helpstring("Returns the number of bytes received on this connection"), helpcontext(0x0005302f)]
  64.         HRESULT BytesReceived([out, retval] long* BytesReceived);
  65.         [id(0x00000040), helpstring("Connect to the remote computer"), helpcontext(0x00053030)]
  66.         HRESULT Connect(
  67.                         [in, optional] VARIANT RemoteHost,
  68.                         [in, optional] VARIANT RemotePort);
  69.         [id(0x00000041), helpstring("Listen for incoming connection requests"), helpcontext(0x00053031)]
  70.         HRESULT Listen();
  71.         [id(0x00000042), helpstring("Accept an incoming connection request"), helpcontext(0x00053032)]
  72.         HRESULT Accept([in] long requestID);
  73.         [id(0x00000043), helpstring("Send data to remote computer"), helpcontext(0x00053033)]
  74.         HRESULT SendData([in] VARIANT data);
  75.         [id(0x00000044), helpstring("Retrieve data sent by the remote computer"), helpcontext(0x00053034)]
  76.         HRESULT GetData(
  77.                         [in, out] VARIANT* data,
  78.                         [in, optional] VARIANT type,
  79.                         [in, optional] VARIANT maxLen);
  80.         [id(0x00000045), helpstring("Look at incoming data without removing it from the buffer"), helpcontext(0x00053035)]
  81.         HRESULT PeekData(
  82.                         [in, out] VARIANT* data,
  83.                         [in, optional] VARIANT type,
  84.                         [in, optional] VARIANT maxLen);
  85.         [id(0x00000046), helpstring("Close current connection"), helpcontext(0x00053036)]
  86.         HRESULT Close();
  87.         [id(0x00000047), helpstring("Binds socket to specific port and adapter"), helpcontext(0x00053050)]
  88.         HRESULT Bind(
  89.                         [in, optional] VARIANT LocalPort,
  90.                         [in, optional] VARIANT LocalIP);
  91.         [id(0x0000000a), propget, helpstring("Returns/Sets the name used to identify the remote computer"), helpcontext(0x0005302b)]
  92.         HRESULT RemoteHost([out, retval] BSTR* RemoteHost);
  93.         [id(0x0000000a), propput, helpstring("Returns/Sets the name used to identify the remote computer"), helpcontext(0x0005302b)]
  94.         HRESULT RemoteHost([in] BSTR RemoteHost);
  95.     };

  96.     [
  97.       uuid(248DD893-BB45-11CF-9ABC-0080C7E7B78D),
  98.       helpstring("Microsoft Winsock Control events"),
  99.       helpcontext(0x0005303d),
  100.       hidden
  101.     ]
  102.     dispinterface DMSWinsockControlEvents {
  103.         properties:
  104.         methods:
  105.             [id(0x00000006), helpstring("Error occurred"), helpcontext(0x00053048)]
  106.             void Error(
  107.                             short Number,
  108.                             BSTR* Description,
  109.                             long Scode,
  110.                             BSTR Source,
  111.                             BSTR HelpFile,
  112.                             long HelpContext,
  113.                             VARIANT_BOOL* CancelDisplay);
  114.             [id(00000000), helpstring("Occurs when data has been received from the remote computer"), helpcontext(0x00053049)]
  115.             void DataArrival(long bytesTotal);
  116.             [id(0x00000001), helpstring("Occurs connect operation is completed"), helpcontext(0x0005304a)]
  117.             void Connect();
  118.             [id(0x00000002), helpstring("Occurs when a remote client is attempting to connect"), helpcontext(0x0005304b)]
  119.             void ConnectionRequest(long requestID);
  120.             [id(0x00000005), helpstring("Occurs when the connection has been closed"), helpcontext(0x0005304c)]
  121.             void Close();
  122.             [id(0x00000003), helpstring("Occurs during process of sending data"), helpcontext(0x0005304d)]
  123.             void SendProgress(
  124.                             long bytesSent,
  125.                             long bytesRemaining);
  126.             [id(0x00000004), helpstring("Occurs after a send operation has completed"), helpcontext(0x0005304e)]
  127.             void SendComplete();
  128.     };

  129.     [
  130.       uuid(248DD896-BB45-11CF-9ABC-0080C7E7B78D),
  131.       helpstring("Microsoft Winsock Control"),
  132.       helpcontext(0x00053037),
  133.       control
  134.     ]
  135.     coclass Winsock {
  136.         [default] interface IMSWinsockControl;
  137.         [default, source] dispinterface DMSWinsockControlEvents;
  138.     };

  139.     typedef [uuid(248DD894-BB45-11CF-9ABC-0080C7E7B78D), helpstring("State Constants"), helpcontext(0x00053052)]
  140.     enum {
  141.         sckClosed = 0,
  142.         sckOpen = 1,
  143.         sckListening = 2,
  144.         sckConnectionPending = 3,
  145.         sckResolvingHost = 4,
  146.         sckHostResolved = 5,
  147.         sckConnecting = 6,
  148.         sckConnected = 7,
  149.         sckClosing = 8,
  150.         sckError = 9
  151.     } StateConstants;

  152.     typedef [uuid(248DD891-BB45-11CF-9ABC-0080C7E7B78D), helpstring("Error Constants"), helpcontext(0x00053051)]
  153.     enum {
  154.         sckInvalidPropertyValue = 380,
  155.         sckGetNotSupported = 394,
  156.         sckSetNotSupported = 383,
  157.         sckOutOfMemory = 7,
  158.         sckBadState = 40006,
  159.         sckInvalidArg = 40014,
  160.         sckSuccess = 40017,
  161.         sckUnsupported = 40018,
  162.         sckInvalidOp = 40020,
  163.         sckOutOfRange = 40021,
  164.         sckWrongProtocol = 40026,
  165.         sckOpCanceled = 10004,
  166.         sckInvalidArgument = 10014,
  167.         sckWouldBlock = 10035,
  168.         sckInProgress = 10036,
  169.         sckAlreadyComplete = 10037,
  170.         sckNotSocket = 10038,
  171.         sckMsgTooBig = 10040,
  172.         sckPortNotSupported = 10043,
  173.         sckAddressInUse = 10048,
  174.         sckAddressNotAvailable = 10049,
  175.         sckNetworkSubsystemFailed = 10050,
  176.         sckNetworkUnreachable = 10051,
  177.         sckNetReset = 10052,
  178.         sckConnectAborted = 10053,
  179.         sckConnectionReset = 10054,
  180.         sckNoBufferSpace = 10055,
  181.         sckAlreadyConnected = 10056,
  182.         sckNotConnected = 10057,
  183.         sckSocketShutdown = 10058,
  184.         sckTimedout = 10060,
  185.         sckConnectionRefused = 10061,
  186.         sckNotInitialized = 10093,
  187.         sckHostNotFound = 11001,
  188.         sckHostNotFoundTryAgain = 11002,
  189.         sckNonRecoverableError = 11003,
  190.         sckNoData = 11004
  191.     } ErrorConstants;
  192. };
复制代码
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-11-28 22:35:23 | 显示全部楼层
VB6的控件太老了,还是别用了,调用API写个服务端也就几句代码。
回复

使用道具 举报

4

主题

24

帖子

145

积分

培训班

积分
145
 楼主| 发表于 2017-11-28 22:40:50 | 显示全部楼层
求教一个问题。如果一个COM接收传址的变量。怎样的才能正确表达呢?
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-11-28 22:42:25 | 显示全部楼层
0ximi 发表于 2017-11-28 22:40
求教一个问题。如果一个COM接收传址的变量。怎样的才能正确表达呢?

具体什么传址的变量,你上面那代码估计好几百句,关键是乱,我可没时间仔细看。
回复

使用道具 举报

4

主题

24

帖子

145

积分

培训班

积分
145
 楼主| 发表于 2017-11-29 00:21:09 | 显示全部楼层
  SckHandler.getData(strData)  的  strData
  1. import win.ui;
  2. import com;
  3. /*DSG{{*/
  4. var winform = win.form(text="aardio form";right=775;bottom=448)
  5. winform.add(
  6. edit={cls="edit";left=34;top=64;right=759;bottom=416;edge=1;multiline=1;z=1};
  7. static={cls="static";text="static";left=32;top=25;right=743;bottom=49;transparent=1;z=2}
  8. )
  9. /*}}*/

  10. winform.edit.text = ""; //    winform.edit.text 用于观看 mswinsock.ocx 获得客户端什么内容。

  11. Winsock1 = com.CreateObject("MSWinsock.Winsock.1");
  12.     Winsock1.Protocol = 0;
  13.     Winsock1.Bind(80,);
  14.     Winsock1.Listen();
  15. winform.static.text = "主机名:" + Winsock1.LocalHostName  + "   IP:" + Winsock1.LocalIP + ":" + Winsock1.LocalPort + '的服务器启动了!';
  16. var Winsock1Evens = {};
  17. Winsock1Evens.ConnectionRequest = function(requestID){
  18.     if( SckHandler.State != 6 && SckHandler.State !=7 && SckHandler.State != 8) SckHandler.Accept(requestID);
  19. }

  20. com.Connect(Winsock1, Winsock1Evens);

  21. SckHandler =com.CreateObject("MSWinsock.Winsock.1");
  22.     SckHandler.Protocol = 0;
  23.     SckHandler.LocalPort(80);
  24.     SckHandler.Close();
  25. var SckHandlerEvens ={};
  26. SckHandlerEvens.DataArrival =function(bytesTotal){  
  27.      var strData ='';
  28.          try{
  29.                  SckHandler.getData(strData);    // -------> 这儿需要变量传址。 目的将客户请求内容套出来。                
  30.                  winform.edit.text = winform.edit.text +"收到浏览器发出的数据长度:"+  bytesTotal + "byts,  内容:" + strData + '';
  31.          }
  32.      catch(e){
  33.         winform.edit.text = winform.edit.text +  bytesTotal + "GetData Err: " + e;
  34.      }
  35.      var msg ="服务已收到了浏览器的请求!";         
  36.          SckHandler.SendData(msg);
  37. }
  38. SckHandlerEvens.SendComplete =function(){
  39.     SckHandler.Close();
  40. }
  41. com.Connect(SckHandler, SckHandlerEvens);
  42. winform.show()
  43. win.loopMessage();
复制代码
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

39

主题

174

帖子

1037

积分

荣誉会员

htmlayout.cn 我的学习笔记

Rank: 8Rank: 8

积分
1037
发表于 2017-11-29 12:53:43 | 显示全部楼层
定义为raw.buff()如何? 一般这样需要被修改的变量,我在c里都是定义为指针,所以在aar里一般用raw.buff或者你可以直接用{byte xx}这种形式..
抱歉,水平有限, 你代码我也没看懂...胡言乱语...
! www.HtmLayout.Cn 我的学习笔记
回复

使用道具 举报

4

主题

24

帖子

145

积分

培训班

积分
145
 楼主| 发表于 2017-11-29 15:00:10 | 显示全部楼层
C里函数的参数有小鸟&,没小鸟之分,在这儿也试下吧。
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-11-29 18:00:00 | 显示全部楼层
0ximi 发表于 2017-11-29 15:00
C里函数的参数有小鸟&,没小鸟之分,在这儿也试下吧。

不要想复杂了,
在aardio里输出参数都是在返回值里返回,多个输出参数就是多个返回值。

但实际上你这个函数,只有一个输出参数,所以他其实就是一个普通的函数返回值。
var buffer = SckHandler.getData();
这样写就行了。这样是返回一个buffer类型,在aardio中基本可以当字符串用,
如果你要返回字符串类型,在第二个参数里指定返回类型,
var str = SckHandler.getData(,8/*_VT_BSTR*/);

回复

使用道具 举报

4

主题

24

帖子

145

积分

培训班

积分
145
 楼主| 发表于 2017-11-29 23:52:53 | 显示全部楼层
谢谢,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
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

4

主题

24

帖子

145

积分

培训班

积分
145
 楼主| 发表于 2017-11-30 00:01:45 | 显示全部楼层
//我原本考虑到假如有个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组件。
南郭先生
《韩非子·内储说上》
齐宣王使人吹竽,必三百人。南郭处士请为王吹竽。宣王悦之,廪食以数百人。宣王死,湣王立。好一一听之,处士逃。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-11-30 00:02:48 | 显示全部楼层
0ximi 发表于 2017-11-29 23:52
谢谢,VB6的MSWinsock.ocx 这个COM组件
   


VB的这个getData() 函数,他默认返回的是二进制的 buffer,
buffer在aardio里跟字符串差不多,可以在几乎所有字符串函数里使用。

但是 buffer 不能用来跟字符串连接。
你可以用 raw.tostring() 先转为真正的字符串,
这些是aardio基础的语法,你自己再研究一下。

SckHandler.getData(,8/*_VT_BSTR*/);
他这个第二个参数,可以指定返回值的类型,你可以返回字符串。

你要做HTTP服务器,用 wsock.tcp.server,或者 wsock.tcp.simpleHttpServer 不是都可以么。

这个VB6的控件都1998年的东西了,服务端也不需要这种消息异步的方式,尤其是HTTP服务器这些用异步的写法会更加麻烦。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-11-30 00:20:44 | 显示全部楼层
0ximi 发表于 2017-11-30 00:01
//我原本考虑到假如有个dealCom方法的Com组件的功能已经被封装为类似下面的样子,x和y是传址的参数。
var  ...

好好看一下前面的答案,
前面的getData() 函数已经回答过你相同的问题。

COM控件,或API函数的这些输出参数,
都可以在返回值中接收对应参数的输出值。

var x,y = dealCom(x,y )
如果dealCom 自己有返回值,就要写成:
var ret,x,y = dealCom(x,y )



回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-11-30 14:50:55 | 显示全部楼层
我昨天改进了一下文档,参考:基础语法->使用函数参数->输出参数
http://bbs.aardio.com/doc/reference/the%20language/function/parameter.html
其实在帮助文档很多章节都有提到这种用法,

在aardio里并不是没有输出参数,只是你要明确的接收对应参数的返回值。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-12 01:46 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表