Стёкотряска

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Адская_Капча
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 60
Зарегистрирован: 28.07.2014 (Пн) 20:22

Стёкотряска

Сообщение Адская_Капча » 15.09.2015 (Вт) 12:57

Всем привет, и Адская Капча снова с вами Изображение

О какой-такой тряске говорилось здесь (viewtopic.php?p=6734562#p6734562)? И где там был ByVal, что-то не видно его...
Какой из нижеприведенных способов передачи параметров будет наиболее эффективным с точки зрения быстродействия, кто знает?

1.
Код: Выделить всё
addr = MyFunction(Var)

Function MyFunction(Arg1 as Long) as Long
   'значение изменяемо
End If


2.
Код: Выделить всё
addr = MyFunction(Var)

Function MyFunction(ByVal Arg1 as Long) as Long
End If


3.
Код: Выделить всё
addr = MyFunction(ByVal Var)

Function MyFunction(ByVal Arg1 as Long) as Long
End If


С вызовами API - аналогичный вопрос (когда нужно передать значение, а не указатель):

4.
Код: Выделить всё
Declare Function FuncName Lib "LibName" (ByVal Parameter As Long)

Dim Arg as long
Ret = FuncName(Arg)


5.
Код: Выделить всё
Declare Function FuncName Lib "LibName" (ByVal Parameter As Long)

Dim Arg as long
Ret = FuncName(ByVal Arg)


6.
Код: Выделить всё
Declare Function FuncName Lib "LibName" (Parameter As Long)

Dim Arg as long
Ret = FuncName(ByVal Arg)


7.
Код: Выделить всё
Declare Function FuncName Lib "LibName" (Parameter As Any)
Dim Arg as long
Ret = FuncName(ByVal Arg)

(Any - полезен, чтобы не объявлять лишние API при передаче различных типов параметров)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Стёкотряска

Сообщение Хакер » 15.09.2015 (Вт) 13:04

Во-первых, не стёк, а стЭк.

В отношении типа Long из вариантов 1 и 2 более оптимален вариант № 2. В отношении некоторых других типов картина иная.
Вариант 3 в таком контексте не имеет никакого отличия от варианта 2.

Что касается API-функций, то объявлять их надо исключительно так, как того ожидает сама функция. Здесь у тебя никакого выбора нет.

Варианты 4 и 5 идентичны.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Адская_Капча
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 60
Зарегистрирован: 28.07.2014 (Пн) 20:22

Re: СтЭкотряска

Сообщение Адская_Капча » 15.09.2015 (Вт) 14:09

Все дело в том, что этот (viewtopic.php?p=6762245#p6762245) пост и передача (не объявление) параметра как ByVal вносят некоторую неясность...

Я не про передачу строки как значения, а про разницу "объявить как pStr as long, передать ByVal StrPtr(String)" и "объявить как ByVal pStr as long, передать StrPtr(String)"


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

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

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

    TopList