Страница: 1 |
Страница: 1 |
Вопрос: ByVal Почему не пашет?
Добавлено: 24.08.06 14:24
Автор вопроса: FIX | ICQ: 348680795
Пишет: "Ошибка компиляции: Определённый пользователем тип может быть не пропущенным ByVal". Я в первый раз пользуюсь ByVal-ом, если что, сильно не ругайте.
ФОРМА
Private Type Koordinats
X As Integer
Y As Integer
Z As Integer
End Type
Private Function fncAngle(ByVal Point1 As Koordinats, ByVal Point2 As Koordinats, ByVal Point3 As Koordinats) As Single
...
End Function
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #1
Добавлено: 24.08.06 14:48
Ну так себе же сам и отвечаешь: "Определённый пользователем тип может быть не пропущенным ByVal". Что тут непонятно?
Номер ответа: 2
Автор ответа:
FIX
ICQ: 348680795
Вопросов: 39
Ответов: 62
Профиль | | #2
Добавлено: 24.08.06 14:54
Всмысле низя создать копию собственного типа данных что ли? И по другому никак тока через ByRef?
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 24.08.06 15:08
Кто тебе мешает создать копию. Можешь прямым присвоением, можешь через LSet. ByVal ты UDT не передашь.
Номер ответа: 4
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #4
Добавлено: 24.08.06 16:42
Кстати, я вот ByVal юзаю когда попало, и до сих пор не понял, чё он, собственно, дает?
Сорри за тупой вопрос))))))
Номер ответа: 5
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #5
Добавлено: 24.08.06 16:50
Так а в чем, собственно, вопрос? ))
Номер ответа: 6
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #6
Добавлено: 24.08.06 16:52
Чё дает ByVal? Можно ведь без него писать?
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 24.08.06 17:07
Можно, можно, можно, можно, можно...
Но не всегда это нужно, нужно... А во многих случаях - нельзя, нельзя, нельзя, нельзя...
Ибо если ты не пишешь ByVal - считай что ты пишешь ByRef. В .NET ситуацию зачем то перевернули с ног на голову.
Номер ответа: 8
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #8
Добавлено: 24.08.06 18:07
Я, ваще-то, насчет ByRef'ов пень-пнем ))))))))) Обьясни, пжлст, што делают?
p.s. Извеняюсь за кучу тупых вопросов )))))))))))))))))))))
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 24.08.06 18:17
Самое тупое объяснение:
ByVal (By Value) - передача параметра по значению (для неуказательных типов)
ByRef (By Reference) - передача параметра по ссылке
Разница, надеюсь, улавливается. Подробности в литературе
Номер ответа: 10
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #10
Добавлено: 24.08.06 19:07
1)После использования этой функцией - значения переменных-орининалов не изменятся
2)Когда используешь эту функцию, вписывая ее значения в другой операции - она не будет глючить тем, что там тип переменной ли не совпадает,...
Номер ответа: 11
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #11
Добавлено: 24.08.06 19:34
При чем тут типы? При раннем связывании соответствие типов проверяется на этапе компиляции, и компилятор не позволит тебе допустить несоответствие, хоть ByRef, хоть ByVal. А при позднем и вовсе похрену - все параметры VARIANTARG метода Invoke проверяются при фактическом вызове. Так что несоответствие получишь в любом случае. Разумеется, я не имею ввиду Variant, сменить тип которой с большой дури легко
Справедливо только для базовых типов. Попробуй передать объектную переменную ByVal. Указатель изменить сможешь, но копия объекта не создается (за отдельными исключениями).
Отдельная тема - АПИ. Без ByVal с ними делать нечего. Кроме того, VB автоматически производит некоторые преобразования, к примеру, ByVal as String приводит BSTR к LPSTR и т.п.
Эээ... Чет меня понесло. Ну дык... пьем на работе )
Номер ответа: 12
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #12
Добавлено: 24.08.06 21:32
- Закусывать надо! ))
Номер ответа: 13
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #13
Добавлено: 25.08.06 07:16
Спасибо, уловил)