Тема: JScript: ссылка на SafeArray
Привет!
Есть задача: передать методу COM-объекта ссылку на SafeArray в виде параметра. Этот метод запишет в искомый SafeArray некоторые данные.
HRESULT STDMETHODCALLTYPE SomeMethod(LPSAFEARRAY* Buffer);
Вопрос: как это сделать?
Пробовал так:
var dictionary = new ActiveXObject("Scripting.Dictionary");
for (var i = 0; i < 10; i++) {
dictionary.add(i, 0);
};
var ar1 = dictionary.items();
var ar2 = VBArray(ar1);
var ar3 = VBArray(ar1).toArray();
var ar4;
SomeObj.SomeMethod(ar1);
SomeObj.SomeMethod(ar2);
SomeObj.SomeMethod(ar3);
SomeObj.SomeMethod(ar4);
Все 4 варианта возвращают исключение: Type mismatch.
WScript.echo(typeof ar1); // unknown
WScript.echo(typeof ar2); // unknown
WScript.echo(typeof ar3); // object
WScript.echo(typeof ar4); // undefined
Если кто-нибудь сталкивался с подобной проблемой, прошу подсказать путь к решению.
Пока нашел кривое решение:
написал промежуточную ActiveX dll, которая работает непосредственно с искомым COM сервером, получив SAFEARRAY она возвращает JScript-у массив в виде объекта CkData (http://www.chilkatsoft.com/refdoc/xCkDataRef.html).
Но это лишь временное решение... Существует необходимость работать с данным COM без посредников.