![]() |
![]() |
|
Передача массива из 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 я просто обращаюсь)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |