home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   alt.comp.os.windows-xp      Actually wasn't too bad for a M$-OS      17,273 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 16,909 of 17,273   
   JJ to R.Wieser   
   Re: VBScript OCX receive and supply a sa   
   22 May 24 06:56:18   
   
   XPost: alt.windows7.general, comp.os.ms-windows.programmer.win32   
   From: jj4public@outlook.com   
      
   On Tue, 21 May 2024 20:44:34 +0200, R.Wieser wrote:   
   > Hello all,   
   >   
   > I've just build an OCX for usage within vbscript, and am running into a   
   > problem :   
   >   
   > I'm trying to have a method #1 return a SafeArray of type VT_UI1, and later   
   > provide it to a method #2.   
   >   
   > The problem is that when I do this :   
   >   
   > Object.Method2(Object.Method1())   
   >   
   > everything works.   
   >   
   > But when I use an intermediate variable like this   
   >   
   > Data = Object.Method1()   
   > Object.Method2(Data)   
   >   
   > VBScript throws a "Type mismatch" error - and I have no idea why or how to   
   > solve it. :-(   
   >   
   > Declarations of both methods in the IDL file :   
   >   
   > HRESULT Method1([out, retval] SAFEARRAY(unsigned char)* Result);   
   > HRESULT Method2([in] SAFEARRAY(unsigned char) ByteData);   
   >   
   > By the way:   
   >   
   > wscript.echo vartype(Object.Method1())   
   > Data = Object.Method1()   
   > wscript.echo vartype(Data)   
   >   
   > both of the above return &H2011 (array of VT_UI1)   
   >   
   > Help ?   
   >   
   > Regards,   
   > Rudy Wieser   
      
   It's mainly because for array, VBScript only have native support for array   
   of variant. It has no native support for array of non-variant. Meaning that,   
   it has no built-in conversion between array of variant and array of   
   non-variant.   
      
   In case of array of integers generated by VBScript itself, they're stored as   
   array of variants where those variants contain an int. VBScript by itself,   
   can't directly create an array of non-variant. Only array of variant.   
      
   To workaround the problem, store the array of non-variant result from   
   `Method1()` into VBScript generated array first, then store that VBScript   
   generated array into a variable. To use the result, pass the VBScript   
   generated array's element (i.e. the array of non-variant) to `Method2()`.   
   e.g.   
      
   Data = array(Object.Method1())   
   Object.Method2(Data(0))   
      
   Related to VBScript limitation...   
   The `byval` and `byref` keywords are not available for explicitly passing a   
   value to a method as a copy or a reference. They're only for   
   subroutine/function declaration. So VBScript by default will pass value to   
   methods as a copy rather than a reference. Only if the method argument type   
   was specifically declared as a reference (i.e. only accept a reference),   
   VBScript will pass a value as a reference.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca