Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Передача в процедуру строковых параметров


Автор: PsiMagistr 18.5.2010, 09:26
Ребята, столкнулся с такой неожиданной проблемой.

Объявляю процедуру:

Код

Procedure Proba(j:string);
begin

.
.
.

end; 

//Все работает нормально.


Но стоит создать параметр в виде строки фиксированной длины:
Код

Procedure Proba(j:string[40]);
begin

.
.
.

end;

//Ошибка


Ошибочка. Ругается компилятор. Причем это происходит еще до вызова процедуры, то есть еще на этапе ее описания.

Автор: Rrader 18.5.2010, 09:34
Вот цитата из справки, где всё написано
Код

//When you declare routines that take short-string parameters, you cannot include length specifiers in the parameter declarations. That is, the declaration

procedure Check(S: string[20]);   // syntax error

//causes a compilation error. But

type TString20 = string[20];
procedure Check(S: TString20);

//is valid. The special identifier OpenString can be used to declare routines that take short-string parameters of varying length:

procedure Check(S: OpenString);

//When the {$H-} and {$P+} compiler directives are both in effect, the reserved word string is equivalent to OpenString in parameter declarations.

//Short strings, OpenString, $H, and $P are supported for backward compatibility only. In new code, you can avoid these considerations by using long strings.

Автор: PsiMagistr 18.5.2010, 10:04
Rrader,  Огромное Вам спасибо, выручили. Создал принудительный строковый тип фикс. длины и везде его использовал. Все заработало.

Единственное, с чем не разобрался со второй частью справки. Что это за тип OpenString? 

Автор: bems 19.5.2010, 04:18
Это значит, что в процедуру мужно передать ShortString, независимо от того, с какой максимальной длиной была объявлена передаваемая переменная

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)