5

一連の文字列を取得するには Win32 API を呼び出す必要があり、これらの文字列の配列を JavaScript に返したいと考えています。これは、Web ブラウザ用ではなく、管理スクリプト用にローカル マシンで実行されるスクリプト用です。

COM オブジェクトの IDL ファイルには、次のように呼び出しているインターフェイスがあります。

HRESULT GetArrayOfStrings([out, retval] SAFEARRAY(BSTR) * rgBstrStringArray);

関数は正しく戻りますが、文字列が JavaScript の変数に割り当てられると「失われます」。

問題は、JavaScript 変数に返される文字列の配列を取得する適切な方法は何ですか?

4

2 に答える 2

6

正しく思い出せば、それを通過させるためにをラップしてから、SAFEARRAYVBArrayオブジェクトを使用してJS側で解凍する必要があります。VARIANT

HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
   // ...

   _variant_t ret;
   ret.vt = VT_ARRAY|VT_VARIANT;
   ret.parray = rgBstrStringArray;
   *pvarBstrStringArray = ret.Detach();
   return S_OK;
}

それから

var jsFriendlyStrings = new VBArray( axOb.GetArrayOfStrings() ).toArray();
于 2008-09-05T04:04:12.930 に答える
1

Shog9 は正しいです。COM スクリプトでは、すべての出力がバリアントである必要があります。

実際、すべての INPUT も VARIANT である必要があります。IDispatchの厄介な詳細については、お気に入りのヘルプ ファイルを参照してください。それについて心配する必要がないのは、ATL および同様のレイヤー (おそらくこれが使用されているもの) によるデュアル インターフェイス実装の魔法だけだと考えられています。呼び出しコードによって渡された入力 VARIANT は、実際のメソッドが呼び出される前に、メソッド シグネチャに一致するように変換されます。

于 2008-09-15T21:16:08.510 に答える