alibek » 26.09.2006 (Вт) 16:58
Э...
А...
Мда...
Если ты указываешь ByVal, это значит, что аргумент будет передан по значению. Т.е. текущее значение аргумента будет скопировано во временную переменную и передано в процедуру (вернее, передана будет ссылка на копию). Чтобы ты в процедуре с этой переменной не делал, исходный аргумент не изменит своего значения.
Если ты указываешь ByRef, то аргумент будет передан по ссылке. Т.е. в процедуру будет передан сам аргумент (ссылка на него). В этом случае если ты поменяешь значение аргумента внутри вызываемой процедуры, то он сменит свое значение и в выхывающей процедуре.
Пользовательские типы и массивы могут быть переданы только ByRef. Объекты могут быть переданы любым способом, но следует помнить, что это относится не к содержимому объекта, а к ссылке на него (ссылка на ссылку). Т.е. при уничтожении объекта (Set ... = Nothing) в случае ByVal в вызывающей процедуре объект останется, в случае ByRef обнулится. Object.Value=NewValue в любом случае изменит значение свойства в обоих случаях.
При передаче аргументов через API есть нюансы. Но это в другой раз.
Lasciate ogni speranza, voi ch'entrate.