COM経由での配列データの渡し方

[戻る]
おさむ 2006/03/05(日) 05:39:25
お世話になっております。

IDispatchのInvoke関数から、JScriptの関数に文字列の配列データを
渡そうとしているのですが、VARIANT型の引数に
どのようなデータを与えればよいかわかりません。

SAFEARRAY を使ってみましたがうまくいきませんでした。

ご教授お願いします。

環境は VisualStudio.NET ATL/WTL です。
よろしくおねがいします。

Blue 2006/03/07(火) 13:24:35
JScriptの配列はSafeArray(VB形式の配列)ではないので、
JScript側でScripting.Dictionary等を使って、SafeArray配列に変換したものを
渡すらしいです。

参考)
http://www.imasy.or.jp/~hir/hir/tech/js_tips.html#safearray

上のURLにもありますが、JScriptの配列は「CSV文字列」らしいので、VARIANTでもでき
そうですけど。

KJ 2006/03/07(火) 23:30:11
JScriptからCOM使うのですか?
VCからJScriptの関数(?)を呼び出すのですか?

前者なら、おとなしくVBScriptを間に挟んだほうが早いです。
後者なら、BSTRの配列をSAFEARRAYに格納し、
VT_BSTR|VT_SAFEARRAYを指定してVARIANTにセットすればOKだと思います。

おさむ 2006/03/10(金) 02:11:53
返信ありがとうございます。

あれから、いろいろ試してみました。
JScriptで使用している配列は、Arrayオブジェクトを使用したものでした。
VCからJScriptの関数呼び出しで、SAFEARRAY を使用して渡しても、
うまくいかないのは、JScript内の関数でArrayオブジェクトのプロパティを
使用しようとして、失敗していたからです。

ただの配列の場合は、SAFEARRAY で問題ありませんでした。

古いスレッドには追加発言できません。