From: "Berger, Daniel" Date: 2006-02-03T01:48:30+09:00 Subject: Re: WIN32OLE extension using in/out SAFEARRAYs (Matlab interface) > -----Original Message----- > From: Ryan Hinton [mailto:iobass@email.com] > Sent: Wednesday, February 01, 2006 2:49 PM > To: ruby-talk ML > Subject: WIN32OLE extension using in/out SAFEARRAYs (Matlab interface) > > > I am having trouble calling a COM object (Matlab) using the > excellent WIN32OLE Ruby extension. Several other calls have > worked fine, but this call involves some in/out SAFEARRAYs. > Here is the method signature. > > GetFullMatrix([in] BSTR varname, [in] BSTR workspace, > [in, out] SAFEARRAY(double) *pr, > [in, out] SAFEARRAY(double) *pi) > > The server uses the sizes of the arrays pr and pi to fill > them with the requested data--hence their dual in/out nature. > Does anyone know how to properly make a call like this? Is > it possible? My most successful attempts have given me the > following error. > > WIN32OLERuntimeError: GetFullMatrix > OLE error code:0 in > > HRESULT error code:0x80020005 > Type mismatch. > from (irb):30:in `method_missing' > from (irb):30 > from :0 > > In case you're running on Windows with Matlab installed, here > is the code I am using. > > require 'win32ole' > matlab = WIN32OLE.new('Matlab.Application') > matlab.Execute('bob = 1:5;') > t1 = Array.new(5, 0.0) > t2 = t1.dup > t3 = matlab.GetFullMatrix('bob', 'base', t1, t2) I can't answer your question directly, but a search on "getfullmatrix" + "perl" revealed some Matlab examples that you might be able to borrow from. Regards, Dan