Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 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
Ну так себе же сам и отвечаешь: "Определённый пользователем тип может быть не пропущенным ByVal". Что тут непонятно?

Всмысле низя создать копию собственного типа данных что ли? И по другому никак тока через 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-сайт: sham.clan.su
 Профиль | | #10
Добавлено: 24.08.06 19:07
Чё дает ByVal? Можно ведь без него писать?
Он даёт то, что внутри функции (в кот. ты работаешь с этими переменными) фнция не работает с этими переменными, а создает их копию. Что это дает?
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-сайт: houselab.narod.ru
 Профиль | | #12
Добавлено: 24.08.06 21:32
Эээ... Чет меня понесло. Ну дык... пьем на работе :))

- Закусывать надо! :)))

Ответить

Номер ответа: 13
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #13
Добавлено: 25.08.06 07:16
Спасибо, уловил)

Ответить

Страница: 1 |

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



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