У меня есть функция COM в интерфейсе disp
, как показано ниже,Возвращение нескольких переменных в JavaScript из COM
[id(1)] HRESULT MultipleReturn([out]BSTR* arg1, [out, retval] BSTR* arg2);
реализован как
STDMETHODIMP SomeCoolObject::MultipleReturn(BSTR* arg1, BSTR* arg2)
{
*arg1 = SysAllocString(L"test1");
*arg2 = SysAllocString(L"test2");
return S_OK;
}
В Python я могу назвать его как
import comtypes.client as cc
obj = cc.CreateObject('SomeCoolObject')
a = obj.MultipleReturn()
print(a) # gives (u'test1', u'test2'), Python, I see you don't bite :)
одинаковые в JavaScript
var obj = new ActiveXObject("SomeCoolObject")
// this gives error, kind of obvious
// 'Wrong number of arguments or invalid property assignment'
// var val = obj.MultipleReturn();
var a = "holaaa!";
var val = obj.MultipleReturn(a);
alert(val); // gives "test2"
alert(a); // gives "holaaa!", may be could have given "test1"
Это доказывает, что JavaScript не будет играть в этот мяч. Зачем? Если нет, то как вы возвращаете несколько значений из COM в JavaScript. Для этой конкретной работы я вернул JSON.
Я бы подумал о SafeArray или в этом направлении. –
Да. Я думал об использовании 'SAFEARRAY', но вопрос состоит в сборе двух' [out] 'переменных в JavaScript. Невозможно? – Logan