簡體   English   中英

如何將ActiveX對象的字符串數組返回給JScript

[英]How do I return an array of strings from an ActiveX object to JScript

我需要調用Win32 API來獲取一系列字符串,我想將這些字符串的數組返回給JavaScript。 這適用於在本地計算機上運行管理腳本而不是Web瀏覽器的腳本。

我的COM對象的IDL文件具有我調用的接口:

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

函數返回正確,但是當它們被分配給JavaScript中的變量時,字符串會“丟失”。

問題是:將字符串數組返回到JavaScript變量的正確方法是什么?

如果我沒記錯的話,你需要將SAFEARRAY包裝在VARIANT中以便它通過,然后使用VBArray對象在JS方面解壓縮它:

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

Shog9是正確的。 COM腳本要求所有輸出都是VARIANTS。

實際上,它還要求所有INPUT都是VARIANTS - 在您最喜歡的幫助文件中查看IDispatch的令人討厭的細節。 它只是認為ATL和類似層(你很可能正在使用它)的雙接口實現的神奇之處,你不必擔心這一點。 在調用實際方法之前,將調用由調用代碼傳遞的輸入VARIANT以匹配您的方法簽名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM