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)