Hi Ross,

That's interesting, because I would have thought that using StrCopy(Title, '12345') in this situation would have resulted in the same problem - the compiler must allocate the string differently in this case ;-)

Regards,

Bevan


On 13/05/2013 2:31 a.m., Ross Levis wrote:

In the end I did this...

var TitleStr: string='The DLL Title';

var Title: pChar;

Title := @TitleStr[1];

I could then use CopyStr elsewhere.

Cheers.

*From:*[email protected] [mailto:[email protected]] *On Behalf Of *Bevan Edwards
*Sent:* Sunday, 12 May 2013 7:52 PM
*To:* NZ Borland Developers Group - Delphi List
*Subject:* Re: [DUG] StrCopy problem

Hi Ross,

You don't say which version of Delphi you're using, but I assume it's pre-Unicode support, since you use PChar instead of PAnsiChar or PWideChar.

Out of curiosity I built a small test application and traced through the source code for this snippet of code using the CPU window. What I noticed is that the address of the two strings assigned to 'a' and 'b' are part of program memory. More specifically, Delphi appears to store these strings immediately after the "return" opcode for the procedure and simply puts those addresses into 'a' and 'b'. Since this area of memory is protected while the application is running, that's why you get the error.

By using:
a:=AllocMem(10);
StrCopy(a, 'abcdefghi');
b:='jklmnopqr';
StrCopy(a, b);

The variable 'b' now points to application memory while 'a' is allocated a "write-enabled" memory address, so the access violation doesn't occur.

Regards,

Bevan


On 12/05/2013 5:30 p.m., Ross Levis wrote:

    I did see a & b had a pointer address allocated.  It looked like a
    normal pointer address range.  I'll try allocating 10 bytes to a
    later and see what happens.

    Ross.

    *From:*[email protected]
    <mailto:[email protected]>
    [mailto:[email protected]] *On Behalf Of *Bevan
    Edwards
    *Sent:* Sunday, 12 May 2013 4:48 PM
    *To:* [email protected]
    <mailto:[email protected]>
    *Subject:* Re: [DUG] StrCopy problem

    Actually, based on that article a:='abcdefghi' should assign 10
    bytes and include the zero byte at the end. But I wonder if the
    problem is due to where this data is stored and trying to copy b
    to a results in an attempt to write to protected memory?

    Have you tried allocating 10 bytes of memory to 'a' and then using
    StrCopy?

    Have you run the debugger and checked where the PChars 'a' and 'b'
    are pointing to before StrCopy?




    -------- Original message --------
    From: Ross Levis <[email protected]
    <mailto:[email protected]>>
    Date:
    To: 'NZ Borland Developers Group - Delphi List'
    <[email protected] <mailto:[email protected]>>
    Subject: Re: [DUG] StrCopy problem


    Doesn't really help.

    a := 'abcdefghi' does allocate 9 bytes of RAM.  I can access a and
    b after it is assigned.  The problem is StrCopy crashes.  I would
    expect "a" to have the same string as b once this is executed.

    Ross.

    *From:*[email protected]
    <mailto:[email protected]>
    [mailto:[email protected]] *On Behalf Of *Keith
    Allpress
    *Sent:* Sunday, 12 May 2013 10:27 AM
    *To:* 'NZ Borland Developers Group - Delphi List'
    *Subject:* Re: [DUG] StrCopy problem

    Perhaps:

    http://rvelthuis.de/articles/articles-pchars.html

    *From:*[email protected]
    <mailto:[email protected]>
    [mailto:[email protected]] *On Behalf Of *Ross
    Levis
    *Sent:* Sunday, 12 May 2013 2:39 a.m.
    *To:* 'NZ Borland Developers Group - Delphi List'
    *Subject:* [DUG] StrCopy problem

    var

      a: pChar;

      b: pChar;

    begin

      a := 'abcdefghi';

      b := 'jklmnopqr';

      StrCopy(a,b);

    end;

    Question:  Why does this code crash?




    _______________________________________________

    NZ Borland Developers Group - Delphi mailing list

    Post:[email protected]  <mailto:[email protected]>

    Admin:http://delphi.org.nz/mailman/listinfo/delphi

    Unsubscribe: send an email [email protected]  
<mailto:[email protected]>  with Subject: unsubscribe



_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: [email protected]
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to [email protected] with 
Subject: unsubscribe

_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: [email protected]
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to [email protected] with 
Subject: unsubscribe

Reply via email to