Первый вариант - та самая передача строки от которой ты так стремишся избавиться.
Второй - передача адреса строки.
Можно делать это без введения дополнительной переменной:
Код:
var s: sttring;
myProc(@s);
procedure myProc(value: pointer);
begin
showMessage(string(value^));
end;
Конечно, так можно. Но
Этот вариант во-первых вводит нас в заблуждение. В параметрах
описан указатель, а мы работем с ним как со строкой.
Во-вторых. Пераметр становится параметров по ссылке вместо
параметра по значению. Так лучше тогда сразу записать
procedure myProc(var value: String);
Будет передаваться только указатель строки.
Другой вариант использовать PChar.
Надеюсь, не запутал тебя своими рассуждениями и внес хлть какую-то ясность.
И еще мелким шрифтом.
В Delphi String м.б. как ShortString, так и AnsiString
(и wide ...). Так вот ShortString передается как указано в книге. Насчет
AnsiString не уверен. Нужно посмотреть в справке. В принципе, AnsiString является указателем и компилятор (по-моему мнению) может быть достаточно разумным и разделить два варианта передачи - по ссылке и по значению передавая при этом всегда только указатель.