mcrblog

vcpp-ml

2002年12月

27

[vcpp 00060086] Re: ATLコンポーネントとJavaScriptの引数経由のデータ受けた?

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
27

[vcpp 00060086] Re: ATLコンポーネントとJavaScriptの引数経由のデータ受けた?

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
27

[vcpp 00060085] RE: リモートPCのOS名取得で95と98の見分け方

たかやまです。

渋木さん、ありがとうございます。

そのような方法があること
知りませんでした。

WMIについて知識がありませんので、
少し、学んで、結果をポストさせてください。
27

[vcpp 00060085] RE: リモートPCのOS名取得で95と98の見分け方

たかやまです。

渋木さん、ありがとうございます。

そのような方法があること
知りませんでした。

WMIについて知識がありませんので、
少し、学んで、結果をポストさせてください。
27

[vcpp 00060084] RE: リモートPCのOS名取得で95と98の見分け方

 渋木です。

> ネットワーク上の他のPCに利用できる方法が
> あれば解決なのですが。

 各クライアントが Windows 系で、WMI プロバイダがインストール済みで、(おそら
く)同一ネットワーク上でという前提でよければ、WMI オブジェクトに接続してOS
の諸元を取得することが出来たと思います。


--
// 渋木宏明 (Hiroaki SHIBUKI)
// mailto:h...@mbi.nifty.com
// http://www.hidori.jp/
//
記事検索
Amazon.co.jp
  • ライブドアブログ