Вызов процедуры с произвольным колличеством параметров

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Edhunter
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 30.07.2005 (Сб) 15:24

Вызов процедуры с произвольным колличеством параметров

Сообщение Edhunter » 10.01.2006 (Вт) 10:41

Подскажите, можно ли вызвать процедуру VB с произвольным числом параметров. Т.е. у меня есть набор процедур с разным колличеством параметров, как написать унифицированный механизм вызова любой из этих процедур ?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.01.2006 (Вт) 10:58

Проще сделать так, чтобы процедуры принимали коллекцию и брали необходимые параметры из нее.
Лучший способ понять что-то самому — объяснить это другому.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.01.2006 (Вт) 11:04

sub asdf(paramarray p)
end sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.01.2006 (Вт) 11:06

GSerg
Не то.
Лучший способ понять что-то самому — объяснить это другому.

Edhunter
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 30.07.2005 (Сб) 15:24

Сообщение Edhunter » 10.01.2006 (Вт) 11:29

Я сейчас работаю с VBS и неочень представляю как ему передать коллекцию :oops:

Edhunter
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 30.07.2005 (Сб) 15:24

Сообщение Edhunter » 10.01.2006 (Вт) 11:36

На самом деле мне нужно что то вроде парсинга вызова процедуры. Мне как то не хочется переписывать все процедуры, что бы они принимали на вход коллекцию. Опять же метод нужен унифицированный. Будет тяжело заставить людей писать процедуры так как я считаю нужным :lol:

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.01.2006 (Вт) 11:36

Воспользуйся Scripting.Dictionary
Хотя на твоем месте я бы не стал заморачиваться с подобной унификацией. Тем более в VBS.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.01.2006 (Вт) 11:43

На самом деле мне нужно что то вроде парсинга вызова процедуры. Мне как то не хочется переписывать все процедуры, что бы они принимали на вход коллекцию. Опять же метод нужен унифицированный. Будет тяжело заставить людей писать процедуры так как я считаю нужным

Отсюда поподробнее. VBS? Через скрипт контрол? Как вызываются процедуры? Что значит какие-то люди пишут процедуры?
Лучший способ понять что-то самому — объяснить это другому.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.01.2006 (Вт) 11:58

Antonariy писал(а):GSerg
Не то.

Обоснуй.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Edhunter
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 30.07.2005 (Сб) 15:24

Сообщение Edhunter » 10.01.2006 (Вт) 12:10

У меня есть приложение со встроенным языком програмирования VBS. Мне нужно извне (например из Офиса) звать процедуры написаные в этом приложении. Вызов звучит примерно так:
tdms.ExecuteScript "Имя команды", "Имя процедуры", параметры через запятую

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.01.2006 (Вт) 12:36

Тогда, действительно, примерно так, как сказал GSerg

Код: Выделить всё
Function ExecuteScript(CmdName as String, ProcName as String, ParamArray Params())
    Select case LCase(ProcName)
        Case "somefunc"
            ExecuteScript=SomeFunc(Params(0), Params(1))
            'Не знаю уж что значит "Имя команды"...
....
End Function
Лучший способ понять что-то самому — объяснить это другому.

Edhunter
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 30.07.2005 (Сб) 15:24

Сообщение Edhunter » 10.01.2006 (Вт) 12:41

Мде... При использовании Case его ведь придётся "учить" каждой новой процедуре, что не есть гуд. Хотя и как вариант...
Вобщем буду ещё думать :study:

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.01.2006 (Вт) 12:57

Советую все-таки подумать о переписании вызова собственных процедур - можно будет объединить их в класс и сделать так:

Код: Выделить всё
Function ExecuteScript(ProcName as String, ParamArray Params())
    ExecuteScript=CallByName(FuncClass, ProcName, VbMethod, Params)
End Function

'А процедуры изменить - всего лишь:
Function SomeFunc(Param1, Param2)
'на
Function SomeFunc(Params())
Dim Param1, Param2
Param1 = Params(0)
Param2 = Params(1)
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 21

    TopList