# Complicated output parameter in WIN32OLE

**URL:** <https://www.ruby-forum.com/t/complicated-output-parameter-in-win32ole/186503>\
**Category:** Ruby\
**Created:** [April 8, 2010, 3:04am UTC](https://www.ruby-forum.com/t/complicated-output-parameter-in-win32ole/186503 "2010-04-08T03:04:50Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![mitchellh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/8491ac/32.png) [@mitchellh](https://www.ruby-forum.com/u/mitchellh)\
**Post date:** [April 8, 2010, 3:04am UTC](https://www.ruby-forum.com/t/complicated-output-parameter-in-win32ole/186503/1 "2010-04-08T03:04:50Z")

</div>

Hello,

I have a somewhat “complicated” output parameter I need to get via  
WIN32OLE and I’m having trouble getting it correct. The method signature  
is as follows:

void GetDescription (out VirtualSystemDescriptionType[] aTypes, out  
wstring[] aRefs, out wstring[] aOvfValues, out wstring[] aVBoxValues,  
out wstring[] aExtraConfigValues)

I’m able to get basic string output parameters fine, but as soon as I  
hit this method, I was stumped. How am I supposed to query this method  
via the ‘win32ole’ library. My initial attempts were failures:

object.GetDescription(0, 0, 0, 0, 0) # Errors type mismatch  
object.GetDescription([], [], [], [], []) # Errors type mismatch

I’m fairly certain I’ll have to use object.\_invoke directly here but I’m  
not sure what types to put into the types array. I have the win32ole.c  
file open and I’m looking at the various types which are defined but I’m  
not sure which to try.

Some guidance would be greatly appreciated. How would I call this  
function?

Thank you,  
Mitchell H.

---

<div class="post-metadata">

**Author:** ![mitchellh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/8491ac/32.png) [@mitchellh](https://www.ruby-forum.com/u/mitchellh)\
**Post date:** [April 8, 2010, 3:51am UTC](https://www.ruby-forum.com/t/complicated-output-parameter-in-win32ole/186503/2 "2010-04-08T03:51:59Z")

</div>

On Apr 7, 2010, at 8:05 PM, Mitchell H. wrote:

> I’m able to get basic string output parameters fine, but as soon as I  
> hit this method, I was stumped. How am I supposed to query this method  
> via the ‘win32ole’ library. My initial attempts were failures:
> 
> object.GetDescription(0, 0, 0, 0, 0) # Errors type mismatch  
> object.GetDescription([], [], [], [], []) # Errors type mismatch
> 
> I’m fairly certain I’ll have to use object.\_invoke directly here but I’m  
> not sure what types to put into the types array. I have the win32ole.c  
> file open and I’m looking at the various types which are defined but I’m  
> not sure which to try.

I’m not sure what to do here either. Have you tried retrieving the  
WIN32OLE\_METHOD and then looping through each param and asking its  
#ole\_type?

Check out WIN32OLE\_PARAM.ole\_type for the general idea.

cr

---

<div class="post-metadata">

**Author:** ![mitchellh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/8491ac/32.png) [@mitchellh](https://www.ruby-forum.com/u/mitchellh)\
**Post date:** [April 8, 2010, 6:33am UTC](https://www.ruby-forum.com/t/complicated-output-parameter-in-win32ole/186503/3 "2010-04-08T06:33:43Z")

</div>

Chuck R. wrote:

> I’m not sure what to do here either. Have you tried retrieving the  
> WIN32OLE\_METHOD and then looping through each param and asking its  
> #ole\_type?
> 
> Check out WIN32OLE\_PARAM.ole\_type for the general idea.

Chuck,

Thanks for the response. I looped through each to print out the ole\_type  
and got the following:

VirtualSystemDescription,VirtualSystemDescription  
BSTR,BSTR  
BSTR,BSTR  
BSTR,BSTR

I’m not sure why there are two for each? Besides that, do these types  
mean something useful for the refs (for arrays)?

Mitchell

---

<div class="post-metadata">

**Author:** ![mitchellh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/8491ac/32.png) [@mitchellh](https://www.ruby-forum.com/u/mitchellh)\
**Post date:** [April 8, 2010, 1:30pm UTC](https://www.ruby-forum.com/t/complicated-output-parameter-in-win32ole/186503/4 "2010-04-08T13:30:22Z")

</div>

On Apr 7, 2010, at 11:33 PM, Mitchell H. wrote:

> and got the following:
> 
> VirtualSystemDescription,VirtualSystemDescription  
> BSTR,BSTR  
> BSTR,BSTR  
> BSTR,BSTR
> 
> I’m not sure why there are two for each? Besides that, do these types  
> mean something useful for the refs (for arrays)?

I don’t really know how to deal with the VirtualSystemDescription but at  
least we know the BSTR maps to VT\_BSTR in WIN32OLE::VARIANT. That’s a  
good start.

So for BSTR use WIN32OLE::VARIANT::BSTR and for VirtualSystemDescription  
try WIN32OLE::VARIANT::VT\_VARIANT. See what happens when you invoke the  
method with that argument list.

cr
