Имя: Пароль:
1C
1С v8
Передача массива из 1С в vbscript через COM
0 milk911
 
14.09.15
11:32
Добрый день! Пишу скрипт на VB и запускаю его через 1С стандартным образом:

Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.Language = "vbscript";
Текст = "
    |Function TestF(Arr, test)
    |    test = Arr(0)
    |End Function";

МассивArr = Новый Массив;
МассивArr.Добавить("ASDF");

Test = 0;
Скрипт.AddCode(Текст);
й=Скрипт.Run("TestF", МассивArr, Test);
Сообщить(Test);

При выполнении ошибка:
Произошла исключительная ситуация (Ошибка выполнения Microsoft VBScript): Объект не поддерживает это свойство или метод: 'Arr'
Получается VB не понимает, что ему на вход передается массив.
Я читал тут: v8: MSScriptControl.ScriptControl AddCode , что мы не можем написать Function TestF(Arr AS String, test), т.к. нет строгой типизации.
Как быть? Может есть другой способ передать массив?
Спасибо!
1 Кирпич
 
14.09.15
11:40
Пожалуйста!
2 Кирпич
 
14.09.15
11:42
(0)мож COMSafeArray попробовать?
3 spectre1978
 
14.09.15
11:43
(0) либо через OLE попробовать, либо тупо строкой с разделителями.
4 spectre1978
 
14.09.15
11:43
а 1Совский объект "массив" это совсем не обязательно то же самое что VBSовский массив
5 Остап Сулейманович
 
14.09.15
11:46
Через COM передаются только простые типы данных. Это нужно осознать и тогда жизнь станет проще.
6 Кирпич
 
14.09.15
11:51
так работает

    Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language = "vbscript";
    Текст = "
    |Function TestF(Arr, test)
    |    test = Arr(0)
    |End Function";


    Массив = Новый COMSafeArray("VT_VARIANT", 2);
    Массив.SetValue(0, 23);

    Test = 0;
    Скрипт.AddCode(Текст);
    й=Скрипт.Run("TestF", Массив, Test);
    Сообщить(Test);
7 milk911
 
14.09.15
11:55
(6) Спасибо! Заработало))
8 Кирпич
 
14.09.15
12:00
обажаю синтаксис-помошника! еще можно так:

Массив1 = Новый Массив;
// заполнение массива Массив1 значениями
// ...
Размер = Новый Массив;
Размер.Добавить(2);
Размер.Добавить(3);
Массив2 = Новый COMSafeArray(Массив1, "VT_I4", Размер);
Массив3 = Новый COMSafeArray(Массив2);
9 SiAl-chel
 
14.09.15
12:52
(0) В VBScript функция возвращает значение в переменной имеющей тоже имя, что и функция, а вот
TestF <> test
10 milk911
 
14.09.15
12:53
(9) Спасибо, я это понимаю. Мне важно было значение test, Сообщить(Test);. А к TestF я просто обращаюсь)
Основная теорема систематики: Новые системы плодят новые проблемы.