ByVal в списке параметров инструкции Declare передает копию 
	переменной, которая передается в процедуру, (для примера, в sub или function) 
	, то есть значение переменной.
	Это означает, что если передается значение переменной 
x , то 
	исходная переменная 
x не будет изменена в любом случае; 
	Однако, если переменная были передана через 
ByRef, 
	значение исходной переменной 
x может быть изменено в 
	вызываемой функции.
	Примечание: для строковых аргументов, 
ByVal в настоящее 
	время имеет другое значение: вместо передачи копии строки, передается 
	указатель 
ZString на строковые 
	данные, тогда как 
ByRef передает 
	обычную ссылку 
String, т.е. 
	указатель на FreeBASIC строковой дескриптор. Такое поведение позволяет 
	передавать 
ByVal String 
	непосредственно в процедуры C. Строка, переданная таким образом не должна 
	быть изменена 
Sub/
Function, 
	так как дескриптор строки не будет обновляться. Смысл передачи 
String ByVal 
	может измениться в будущем; таким образом, передачи 
String ByVal 
	следует избегать.  
ZString больше 
	подходит для передачи строк с завершающимся нулем в функции C.
	Противоположность 
ByRef.
	Ключевое слово 
ByVal также используется в контексте 
Byref 
	Параметров и 
	Результатов функций,  где оно может быть использовано для явного 
	переопределения семантики по ссылке для того, чтобы передать или назначить 
	указатель, как параметр 
Byref или результат функции. Для справки:
 См. также