ссылка на SafeArray в JScript
Привет!
Есть задача: передать методу 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 Если кто-нибудь сталкивался с подобной проблемой, прошу подсказать путь к решению. |
Цитата:
var dictionary = new ActiveXObject("Scripting.Dictionary"), //WScript
array = ['some1', 'some2', 'some3'], //items
i = 10; //count
while(i--) {
if(array[i] != undefined) {
dictionary.Add(i, array[i]);
}
}
var j = dictionary.Count, result = [];
while(j--) {
if(dictionary.Exists(j)) {
result.unshift((dictionary.Item(j)));
}
}
WScript.echo(result);
Чтобы посмотреть в IE:
if (window.ActiveXObject) {
var dictionary = new ActiveXObject("Scripting.Dictionary"), array = ['some1', 'some2', 'some3'], i = 10;
while(i--) {
if(array[i] != undefined) {
dictionary.Add(i, array[i]);
}
}
var j = dictionary.Count, result = [];
while(j--) {
if(dictionary.Exists(j)) {
result.unshift((dictionary.Item(j)));
}
}
alert(result.join(', '));
}
else {
alert('This browser does not support ActiveXObject');
}
|
Спасибо за ответ, но боюсь, что результат тот же: Type mismatch
result в данном случае будет объектом типа Array... но никак не SafeArray... :( Напоминаю как выглядит структура SafeArray: Код:
typedef struct tagSAFEARRAY |
Пока нашел кривое решение:
написал промежуточную ActiveX dll, которая работает непосредственно с искомым COM сервером, получив SAFEARRAY она возвращает JScript-у массив в виде объекта CkData (http://www.chilkatsoft.com/refdoc/xCkDataRef.html). Но это лишь временное решение... Существует необходимость работать с данным COM без посредников. |
| Часовой пояс GMT +3, время: 09:45. |