From: Masaki Suketa Date: 2010-01-23T07:15:21+09:00 Subject: Re: win32ole with COM method taking two out refs Hello, On Sat, Jan 23, 2010 at 12:13:09AM +0900, Tallak Tveide wrote: > My application: > ... > items = Object.new # output > errors = Object.new # output > group.OPCItems.AddItems 1, ['', 'Random.Int1'], [0, 1], items, errors > .. > > The olegen code for the method looks like this: > > # VOID AddItems > # Adds OPCItem objects to the collection > # I4 arg0 --- NumItems [IN] > # BSTR arg1 --- ItemIDs [IN] > # I4 arg2 --- ClientHandles [IN] > # I4 arg3 --- ServerHandles [OUT] > # I4 arg4 --- Errors [OUT] > # VARIANT arg5 --- RequestedDataTypes [IN] > # VARIANT arg6 --- AccessPaths [IN] > def AddItems(arg0, arg1, arg2, arg3, arg4, arg5=nil, arg6=nil) > ret = _invoke(1610743820, [arg0, arg1, arg2, arg3, arg4, arg5, > arg6], [VT_I4, VT_BYREF|VT_ARRAY|VT_BSTR, VT_BYREF|VT_ARRAY|VT_I4, > VT_BYREF|VT_ARRAY|VT_I4, VT_BYREF|VT_ARRAY|VT_I4, VT_VARIANT, > VT_VARIANT]) > @lastargs = WIN32OLE::ARGV > ret > end > How about using WIN32OLE_VARIANT? items = WIN32OLE_VARIANT(null, WIN32OLE::VARIANT::VT_NULL) errors = WIN32OLE_VARIANT(null, WIN32OLE::VARIANT::VT_NULL) group.OPCItems.AddItems 1, ['', 'Random.Int1'], [0, 1], items, errors p items.value p errors.value WIN32OLE_VARIANT is available in Ruby 1.9 or later. And you can't use WIN32OLE_VARIANT with olegen code. Could you try WIN32OLE_VARIANT without olegen code? Regards, Masaki Suketa