Tietew です。

On Fri, 27 Dec 2002 10:55:03 +0900
In article <006b01c2ad4a$f9c83d30$c...@bbbrain.jp>
[[vcpp 00060082] Re: ATLコンポーネントとJavaScriptの引数経由のデータ受けた?]
"hashi" <h...@bb-brain.co.jp> wrote:

>   結局、JavaSpからCOMの引数を経由しての
> 引き渡しは難解のようです。

難解なのではなく,不可能です。
JScript のリファレンスを見てください。
http://msdn.microsoft.com/library/?url=/library/en-us/script56/html/js56jsoriJScript.asp

> 1.■JavaSp内でArray()を使うと参照渡しが可能なことが
>   わかりました。
 :
> 2.■これを踏まえて、COMを呼び出してみたのですが、
>     VARIANTタイプが「VT_DISPATCH」 となってしまい、
>   設定方法も解らず残念しました。

IDispatch インタフェイスを利用して,プロパティ "0" にセットすれ
ばよいです。

具体的には:

VARIANT disp;  // 引数 (VT_DISPATCH)
VARIANT vt;    // セットしたい値が入った VARIANT

DISPID id;
disp->GetIDsOfNames(IID_NULL, L"0", 1, DEF_LANGID, &id);

DISPPARAMS dp;
UINT arg_errs;
VARIANT retval;
dp.cArgs = 1;
dp.cNamedArgs = 0;
dp.rgvarg = &vt;
dp.rgdispidNamedArgs = NULL;
VariantInit(&retval);
disp->Invoke(id, IID_NULL,
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
  DISPATCH_PROPERTYSET, &dp, &retval, NULL, &arg_errs);

なお,戻り値の HRESULT のチェックとか,VARIANT の生成・破棄は正
しく行わないとメモリリークしたりアクセス違反が起こりますので注意。


―[ Tietew ]――――――――――――――――――――――――――――
Mail: t...@tietew.net / t...@raug.net
Web : http://www.tietew.net/     Tietew Windows Lab.
PGP fingerprint: 26CB 71BB B595 09C4 0153  81C4 773C 963A D51B 8CAA