Mixing Delphi Strings and Null-Terminated Strings
You can mix long strings (AnsiString values) and null-terminated strings (PChar values) in expressions and
assignments, and you can pass PChar values to functions or procedures that take long-string parameters. The
assignment
S := P
, where
S
is a string variable and
P
is a PChar expression, copies a null-terminated string into
a long string.
In a binary operation, if one operand is a long string and the other a PChar, the PChar operand is converted to a
long string.
You can cast a PChar value as a long string. This is useful when you want to perform a string operation on two
PChar values. For example,
S := string(P1) + string(P2);
You can also cast a long string as a null-terminated string. The following rules apply.
If
S
is a long-string expression,
PChar(S)
casts
S
as a null-terminated string; it returns a pointer to the first
character in
S
. For example, if
Str1
and
Str2
are long strings, you could call the Win32 API
MessageBox
function like this:
MessageBox(0, PChar(Str1), PChar(Str2), MB_OK);
74
You can also use
Pointer(S)
to cast a long string to an untyped pointer. But if
S
is empty, the typecast returns
nil.
PChar(S)
always returns a pointer to a memory block; if
S
is empty, a pointer to
#0
is returned.
When you cast a long-string variable to a pointer, the pointer remains valid until the variable is assigned a new
value or goes out of scope. If you cast any other long-string expression to a pointer, the pointer is valid only
within the statement where the typecast is performed.
When you cast a long-string expression to a pointer, the pointer should usually be considered read-only. You
can safely use the pointer to modify the long string only when all of the following conditions are satisfied.
The expression cast is a long-string variable.
The string is not empty.
The string is unique - that is, has a reference count of one. To guarantee that the string is unique, call the
SetLength,
SetString
, or
UniqueString
procedure.
The string has not been modified since the typecast was made.
The characters modified are all within the string. Be careful not to use an out-of-range index on the pointer.
The same rules apply when mixing WideString values with PWideChar values.
75
|