Два ну совсем глупых вопроса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Два ну совсем глупых вопроса

Сообщение A.A.Z. » 03.08.2003 (Вс) 23:37

Иногда в кодах попадается такое (пример):
Код: Выделить всё
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long


1. Что значит "Declare"?
2. Что значит "ByVal"? Почему в некоторых фунциях этого нет, а в некоторых есть?
:?: :oops: :?:
Нет меня больше

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 04.08.2003 (Пн) 0:21

Вот одно очень глупое замечание.....
По заголовку темы, я бы ни за что не догадался о чем речь. :wink:

Ключевое слово Declare значит объявить. Т.е. Определить некую функцию которая будет вызываться вне программы.

ByVal сокращение от By Value, т.е. передача значения, а не ссылки на него, ИМХО
ByRef, соответственно, By Reference, передача ссылки на значение.

Только я не уверен :roll: Надеюсь, что меня невежду, поправят 8)
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

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

Сообщение GSerg » 04.08.2003 (Пн) 2:56

Не поправим, а подтвердим, расширим, углУбим и обОзрим! :D

Declare используется тогда, когда вызываемая функция находится во внешней библиотеке.

ByVal и ByRef - два способа передачи параметров. Дело в том, что VB не поддерживает указатели явно, но всё-таки поддерживает. Передача параметра ByRef (она используется по умолчанию, если не указать способ передачи) - это передача указателя на значение. Принимающая процедура должна будет при каждом обращении к параметру получать его значение по указателю. Передача ByVal - передача не указателя, а самого значения. Принимающая функция не должна зырить в указатель, она сразу имеет значение. В языке C, к примеру, передача указателя на целое - int* a, а передача самого целого - int a. В VB передача указателя на целое - byref a (или просто а), передача самого целого - byval a.
Передача ByVal имеет смысл при числовых значениях, поскольку указатель обычно имеет размер 4 байта, передаваемое число (к примеру, Long) - тоже, поэтому можно сразу толкать его, так быстрее. А передача ByRef актуальна при передаче указателей на объекты, структуры и массивы (всё это нельзя передать ByVal), и, кроме того, в тех случаях, когда вызываемая процедура должна иметь возможность изменить переданный параметр так, чтобы это изменение возымело эффект в вызывающей процедуре.


vbskb_byval vbskb_byref
Последний раз редактировалось GSerg 17.02.2007 (Сб) 22:06, всего редактировалось 1 раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 04.08.2003 (Пн) 15:48

:shock: Спасибо. Понял я далеко не всё :oops: , но это дело не в объяснении, а во мне. :shock:
Нет меня больше

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 04.08.2003 (Пн) 15:55

Топик я закрою. Куда уж подробее.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 86

    TopList