[英]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.