[ruby-list:41806] Win32OLE and MATLAB

From: Masaki Suketa <masaki.suketa@...>
Date: 2006-02-03 07:49:19 UTC
List: ruby-list #41806
助田です。

どなたか、MATLABをWin32OLEから利用したことがある方はいらっしゃいますか?
最近、Win32OLEからMATLABが動かないというメールを頂戴したのですが、
MATLABを持ってないので、ちょっとだけ困ってます。

動かないスクリプトというのが、

| 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)

だそうです。

どなたか、
| matlab.Execute('bob = 1:5;')
と
| t3 = matlab.GetFullMatrix('bob', 'base', t1, t2)
が何をしているのか、t1とt2の配列は [0.0, 0.0, 0.0, 0.0, 0.0]
でいいのかどうか、わかる方がいらっしゃいましたら教えていただけない
でしょうか?

エラーが
| WIN32OLERuntimeError: GetFullMatrix
|     OLE error code:0 in <Unknown>
|       <No Description>
|     HRESULT error code:0x80020005
|       Type mismatch.
|         from (irb):30:in `method_missing'
|         from (irb):30
|         from :0

で、GetFullMatrixは

| GetFullMatrix([in] BSTR varname, [in] BSTR workspace, 
|               [in, out] SAFEARRAY(double) *pr,
|               [in, out] SAFEARRAY(double) *pi)

となっているそうです。

多分、GetFullMatrixをコールするときに VT_VARIANT|VT_BYREF か、VT_ARRAY でしか
呼び出さないWin32OLEが駄目なんだと思ってます。
でも、万が一、t1 とか t2の配列が適切じゃないために、Type mismatch と言われて
いるのかもとちょっとだけ気になっているのです。

  WIN32OLE_VARIANTクラスを充実させるしかないか...。
  助田雅紀

In This Thread

Prev Next