Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Подскажите с ParamArray Добавлено: 28.10.03 14:27  

Автор вопроса:  Serg_xox

Как в вызвать функцию объявленую

Function MyFunc(ParamArray InParam() As Variant)

Если параметры заданы в масиве

    Dim Params()
ReDim Params(2)
Params(0) = "dd0"
Params(1) = "dd1"
Params(2) = "dd2"
MyFunc Params
При таком вызове у меня масив InParam имеет только один аргумент в котром содержится масив из трех значений, а мне нужно чтобы масив InParam и Params были идентичны.

Объявление фунукции MyFunc переделать нельзя.

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #1
Добавлено: 28.10.03 14:31
MyFunc Params(0), Params(1), Params(2)

Ответить

Номер ответа: 2
Автор ответа:
 Serg_xox



Вопросов: 1
Ответов: 3
 Профиль | | #2 Добавлено: 28.10.03 14:37

Массив динамический и только в RunTime известен  размер

(Размер может быть достаточно большим)

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 28.10.03 15:13

Если нельзя изменить массив и нельзя изменить определение функции, то какого совета ты ждешь?

Я бы просто убил ParamArray или сделал этот массив как Public чтобы не передавать его каждой функции. Разумеется, если с ним не часто работаешь.

Можно, конечно, присваивать значения массиву уже внутри функции MyFunc, но это уже совсем бредово.

Почему у тебя такие ограничения на определение функции?

Ответить

Номер ответа: 4
Автор ответа:
 Serg_xox



Вопросов: 1
Ответов: 3
 Профиль | | #4 Добавлено: 28.10.03 15:24

Задача такая есть VBScript который пишет настройщик. С указанием функции входа и параметров

ПРИМЕР

<command name="Test">
    <parameters>
        <par name="Id"/>
        <par name="Condition"/>
    </parameters>

    <Script startfunction="Main">
         Sub Main(Id, Condition)
           ..........

         end Sub
    </Script>
</command>

Нужно этот скрипт запустить под VB

Я использовал ScriptControl

Там есть метод Run(ProcedureName as String, ParamArray Parameters() as Variant )

Теперь мне нужно запустить этот скрипт. Параметры динамически :(  Функция уже определена :(

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 28.10.03 15:49

Мда, попал ты...

Даже не знаю, что тут можно сделать.

На ум приходит лишь тупой перебор количества параметров функцией case, и, в зависимости от этого, соответствующий синтаксис вызова функции.

Я просто не знаю, как эти скрипты отреагируют на избыточные параметры. Так что, кроме case, ничего не вижу. Буду сам рад услышать свежие идеи.

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 29.10.03 14:26
А я что-то немного не врубаюсь... Это .NET? Ведь в VB6 не было
массивов параметров.. Но тогда откуда Variant? Ведь в .NET нет этого
типа данных...

Ответить

Номер ответа: 7
Автор ответа:
 Serg_xox



Вопросов: 1
Ответов: 3
 Профиль | | #7 Добавлено: 29.10.03 14:37

Это VB6 масивы параметров там есть

[Private | Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]

The arglist argument has the following syntax and parts:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

Ответить

Номер ответа: 8
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #8 Добавлено: 30.10.03 19:42

А зачем тебе в данном случае ParamArray?

Function MyFunc(ByRef InParam() As Variant)

И всех делов...

Ну а в теле функции проверь, что она все три "параметра" приняла нормально:

For i = LBound(InParam) To UBound(InParam)

    Debug.Print CStr(i) + " :  " + InParam(i)

Next i

Вообще-то, это простая передача массива Бэйсик-функции в качестве аргумента - один из тех случаев, когда подходит только ByRef, а не ByVal.

 

Ответить

Номер ответа: 9
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #9 Добавлено: 30.10.03 19:45
Ах-ты чёрт... тебе ж нельзя менять объявление функции. М-да, тогда энтот вариант не подходит. Sorry - невнимательно читал.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам