Hi all.  I thought it was safe to use PChar(MyString) in Delphi 4
whenever you needed a PChar, but I'm having a problem with the following
code (somewhat simplified):

var LChar: string;
begin
        with TFileStream.Create(ParamStr(0), // Any file will do - this
is just one guaranteed to exist
          fmOpenRead or fmShareDenyNone) do try
                LChar := 'X';
                if Read(PChar(LChar)^, 1) = 0 then begin
                        ShowMessage('Say what?!!');
                end
                else ShowMessage('Whew!');
        finally
                Free;
        end;
end;

In some cases, depending on what other code I've got in unrelated
places, I get 0 returned - ie., the TFileStream thinks that it can't
read from the file or that the file is empty, which obviously should
never be the case.  Things are complicated by the fact that the error
rarely happens, and when it does putting in a ShowMessage or a
breakpoint cause it to _not_ happen!

So what I'm really asking is, is the code safe?  Should I do one of the
following, which all seem to work (but do they really - for all cases?):

1/.
...
                LChar := 'X';
                UniqueString(LChar); // Is this really necessary?
...

2/.
...
                SetLength(LChar, 1); // Should I be more explicit about
memory allocation?
...

3/.
...
var LChar: string;
    LPChar: PChar;
<snip>
                LChar := 'X';
                LPChar := PChar(LChar); // Or is this a safer way to do
it?
                if Read(LPChar)^, 1) = 0 then begin
...

Or can't I mix PChars and strings at all?

...
var LPChar: PChar;
<snip>
                StrAlloc(LPChar, 1);
                if Read(LPChar)^, 1) = 0 then begin
...

Explanations for any of this gratefully received.

Cheers,

Carl Reynolds                      Ph: +64-9-4154790
CJN Technologies Ltd.             Fax: +64-9-4154791
[EMAIL PROTECTED]                DDI: +64-9-4154795
PO Box 302-278, North Harbour, Auckland, New Zealand
12 Piermark Drive, North Harbour Estate, Auckland, NZ
Visit our website at http://www.cjntech.co.nz/

application/ms-tnef

Reply via email to