<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40"
xmlns:ns0="http://schemas.microsoft.com/office/2004/12/omml">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
name="PersonName"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--a:link
        {mso-style-priority:99;}
span.MSOHYPERLINK
        {mso-style-priority:99;}
a:visited
        {mso-style-priority:99;}
span.MSOHYPERLINKFOLLOWED
        {mso-style-priority:99;}
p
        {mso-style-priority:99;}
p.MSOACETATE
        {mso-style-priority:99;}
li.MSOACETATE
        {mso-style-priority:99;}
div.MSOACETATE
        {mso-style-priority:99;}
span.BALLOONTEXTCHAR
        {mso-style-priority:99;}
span.BALLOONTEXTCHAR0
        {mso-style-priority:99;}
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:Calibri;}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
p
        {mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:Tahoma;}
span.BalloonTextChar
        {font-family:Tahoma;}
span.balloontextchar0
        {font-family:Tahoma;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:Calibri;
        color:#1F497D;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:Arial;
        color:navy;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:Calibri;
        color:#1F497D;}
span.EmailStyle24
        {mso-style-type:personal;
        font-family:Arial;
        color:navy;}
span.EmailStyle25
        {mso-style-type:personal;
        font-family:Calibri;
        color:#1F497D;}
span.EmailStyle27
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>So the your code is like this:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var TitleStr: string = 'abc';<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>procedure test;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var a: pChar;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>begin<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a := @ TitleStr [1];<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a[1] :=
‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>end;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>The reason it works is :<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Though the string ‘abc’ is
still defined in a reserved memory area when OS allocates memory for the
executable,<o:p></o:p></span></font></p>
<p class=MsoNormal><st1:place w:st="on"><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'>Delphi</span></font></st1:place><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'> deals with a[1] := ‘A’ differently.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>It logic is : apply a piece of memory from
OS, copy ‘abc’ in reserved memory area to this new memory
area.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Then change the value of a[1] to ‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>As </span></font><font size=3
color="#1f497d"><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>var
TitleStr: string = 'abc', means that TitleStr is a global variable with
initial value of ‘abc’, which you can change its value later some
time when running, so <st1:place w:st="on">D<font size=2 color=navy face=Arial><span
lang=EN-US style='font-size:10.0pt;font-family:Arial;color:navy'>elphi</span></font></st1:place></span></font><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'> translates the code : <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>procedure test;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var a: pChar;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>begin<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a := @ TitleStr [1];<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a[1] :=
‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>end;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>to the following assembly code :<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>mov eax,
$0044b9bc // $0044b9bc
is the actual address im my computer where ‘abc’ is defined.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>
// It is in reserved memory area </span></font><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>which is
read only.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Call UniqueString //
inside the UniqueString, there is a line : call @NewAnsistring, then make a
copy of ‘abc’ to this memory.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Mov byte ptr [eax + $01], ‘A’ //
eax now becomes $009432B0, it is the pointer to the newly applied memory in the
call UniqueString.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Thus no AV complains from OS.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Instead, if you define <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>const TitleStr = 'abc';<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>As it</span></font><font size=3
color="#1f497d"><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'> means
that TitleStr is a global constant with value of ‘abc’, which you can
not change its value later some time when running, <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>so <st1:place w:st="on">D<font size=2
color=navy face=Arial><span lang=EN-US style='font-size:10.0pt;font-family:
Arial;color:navy'>elphi</span></font></st1:place></span></font><font size=2
color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'> now translates the above code </span></font><font size=3
color="#1f497d"><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>to the following
assembly code :<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>mov eax, $0044a91c
// $0044a91c is the actual address of my computer
where ‘abc’ is defined. It is in reserved memory area</span></font><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'>.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Mov byte ptr [eax + $01], ‘A’ //
eax points to the reserved memory <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Thus AV complains from OS jumps out.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<div>
<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt;font-family:"Times New Roman"'>
<hr size=2 width="100%" align=center tabindex=-1>
</span></font></div>
<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
delphi-bounces@listserver.123.net.nz
[mailto:delphi-bounces@listserver.123.net.nz] <b><span style='font-weight:bold'>On
Behalf Of </span></b>Ross Levis<br>
<b><span style='font-weight:bold'>Sent:</span></b> Monday, 13 May 2013 3:30
p.m.<br>
<b><span style='font-weight:bold'>To:</span></b> '<st1:PersonName w:st="on">NZ
Borland Developers Group - <st1:place w:st="on">Delphi</st1:place> List</st1:PersonName>'<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [DUG] StrCopy problem
- Reason : Const value notallowed tobe changed</span></font><font size=3
face="Times New Roman"><span style='font-size:12.0pt;font-family:"Times New Roman"'><o:p></o:p></span></font></p>
</div>
<p class=MsoNormal><font size=2 face=Calibri><span style='font-size:11.0pt'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>Yep.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>Ross.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'>
<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
delphi-bounces@listserver.123.net.nz
[mailto:delphi-bounces@listserver.123.net.nz] <b><span style='font-weight:bold'>On
Behalf Of </span></b>Jianming Lin (FMI)<br>
<b><span style='font-weight:bold'>Sent:</span></b> Monday, 13 May 2013 3:09 PM<br>
<b><span style='font-weight:bold'>To:</span></b> <st1:PersonName w:st="on">NZ
Borland Developers Group - <st1:place w:st="on">Delphi</st1:place> List</st1:PersonName><br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [DUG] StrCopy problem
- Reason : Const value not allowed tobe changed<o:p></o:p></span></font></p>
</div>
</div>
<p class=MsoNormal><font size=2 face=Calibri><span lang=EN-NZ style='font-size:
11.0pt'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>Hi, Ross,<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>a := ‘abc’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>a[1] := ‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Certainly it will fail. ‘abc’
is defined in a reserved memory area when OS allocates memory for the
executable.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>As for <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>a := @ConsStr[1];<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>a[1] := ‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=EN-NZ
style='font-size:10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span lang=EN-NZ
style='font-size:10.0pt;font-family:Arial;color:navy'>I am wondering how did
you define </span></font><font size=3 color="#1f497d"><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>ConsStr? <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var ConsStr : string = 'abc'; ?<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<div>
<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt;font-family:"Times New Roman"'>
<hr size=2 width="100%" align=center>
</span></font></div>
<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'> <a
href="mailto:delphi-bounces@listserver.123.net.nz">delphi-bounces@listserver.123.net.nz</a>
[<a href="mailto:delphi-bounces@listserver.123.net.nz">mailto:delphi-bounces@listserver.123.net.nz</a>]
<b><span style='font-weight:bold'>On Behalf Of </span></b>Ross Levis<br>
<b><span style='font-weight:bold'>Sent:</span></b> Monday, 13 May 2013 2:55
p.m.<br>
<b><span style='font-weight:bold'>To:</span></b> '<st1:PersonName w:st="on">NZ
Borland Developers Group - <st1:place w:st="on">Delphi</st1:place> List</st1:PersonName>'<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [DUG] StrCopy problem
- Reason : Const value not allowed tobe changed</span></font><font size=3
face="Times New Roman"><span style='font-size:12.0pt;font-family:"Times New Roman"'><o:p></o:p></span></font></p>
</div>
<p class=MsoNormal><font size=2 face=Calibri><span style='font-size:11.0pt'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>The String and pChar in my case are
global vars and the code is executing in a library dpr between
begin..end. There are no units or objects or procedures in use.
This works fine when using global vars, I just tried it…<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>a := @ConsStr[1];<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>a[1] := ‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>But this fails…<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>a := ‘abc’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>a[1] := ‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>Ross.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'>
<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'> <a
href="mailto:delphi-bounces@listserver.123.net.nz">delphi-bounces@listserver.123.net.nz</a>
[<a href="mailto:delphi-bounces@listserver.123.net.nz">mailto:delphi-bounces@listserver.123.net.nz</a>]
<b><span style='font-weight:bold'>On Behalf Of </span></b>Jianming Lin (FMI)<br>
<b><span style='font-weight:bold'>Sent:</span></b> Monday, 13 May 2013 10:35 AM<br>
<b><span style='font-weight:bold'>To:</span></b> <st1:PersonName w:st="on">NZ
Borland Developers Group - <st1:place w:st="on">Delphi</st1:place> List</st1:PersonName><br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [DUG] StrCopy problem
- Reason : Const value not allowed to be changed<o:p></o:p></span></font></p>
</div>
</div>
<p class=MsoNormal><font size=2 face=Calibri><span lang=EN-NZ style='font-size:
11.0pt'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>It seems that we all focus on the StrCopy.
That’s misleading.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Let’s look at this code:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>procedure test;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var a: pChar;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>begin<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a := 'abc’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a[1] :=
‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>end;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>procedure TForm1.Button1Click(Sender:
TObject);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>begin<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'> test;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>end;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>The line : a[1] will cause exactly same AV
as your example.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>As CPU window shows cpu instruction in
assembly language, not many people can understand it, I do further experiment:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>procedure test;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var a: pChar;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>const ConsStr = 'abc';<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>begin<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a := @ConsStr[1];<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a[1] :=
‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>end;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>The same AV will happen. And that’s
the key problem where your code actually is.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Now we can see that the reason of your
code crash:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><st1:place w:st="on"><font size=3 color="#1f497d"
face=Calibri><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>Delphi</span></font></st1:place><font
size=3 color="#1f497d"><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>
compile 'abcdefghi' as the local const value. <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>Certainly constant value is not allowed
to change.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>If you put a line : ConsStr :=
‘def’; Compiler won’t let you go.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>If you purposely use the trick of
pointer : <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a := @ConsStr[1];<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a[1] :=
‘A’;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>to bypass compiler checking, the
operating system then has to activate the last protection by showing the
AV and stop your program to run. <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Bevan is right : the area of memory for
const value is protected while the application is running.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<div>
<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt;font-family:"Times New Roman"'>
<hr size=2 width="100%" align=center>
</span></font></div>
<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'> <a
href="mailto:delphi-bounces@listserver.123.net.nz">delphi-bounces@listserver.123.net.nz</a>
[<a href="mailto:delphi-bounces@listserver.123.net.nz">mailto:delphi-bounces@listserver.123.net.nz</a>]
<b><span style='font-weight:bold'>On Behalf Of </span></b>Ross Levis<br>
<b><span style='font-weight:bold'>Sent:</span></b> Sunday, 12 May 2013 2:39
a.m.<br>
<b><span style='font-weight:bold'>To:</span></b> '<st1:PersonName w:st="on">NZ
Borland Developers Group - <st1:place w:st="on">Delphi</st1:place> List</st1:PersonName>'<br>
<b><span style='font-weight:bold'>Subject:</span></b> [DUG] StrCopy problem</span></font><font
size=3 face="Times New Roman"><span style='font-size:12.0pt;font-family:"Times New Roman"'><o:p></o:p></span></font></p>
</div>
<p class=MsoNormal><font size=2 face=Calibri><span style='font-size:11.0pt'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a: pChar;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> b: pChar;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>begin<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> a := 'abcdefghi';<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> b := 'jklmnopqr';<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'> StrCopy(a,b);<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>end;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>Question: Why does this code
crash?<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></font></p>
<div class=MsoNormal align=center style='text-align:center'><font size=2
face=Arial><span style='font-size:10.0pt;font-family:Arial'>
<hr size=3 width="100%" align=center>
</span></font></div>
<p class=MsoNormal><strong><b><font size=2 face=Arial><span style='font-size:
10.0pt;font-family:Arial'>Attention: </span></font></b></strong><font size=2
face=Arial><span style='font-size:10.0pt;font-family:Arial'><br>
<font color=gray><span style='color:gray'>This mail and any attachments are for
the use of the intended recipient only, and may contain information which is
confidential and/or privileged. If you have received this email in error,
please advise us by return email and immediately delete this email together
with all attachments. The contents of this email may only be used, distributed
or copied with the consent of the author. Fairview Metal Industries Ltd takes
reasonable precautions to minimise the risk of this email containing any
viruses but does not accept liability for any damage caused by software viruses
and advises the recipient to carry out their own virus check on any
attachments.</span></font><o:p></o:p></span></font></p>
<div class=MsoNormal align=center style='text-align:center'><font size=2
face=Arial><span style='font-size:10.0pt;font-family:Arial'>
<hr size=3 width="100%" align=center>
</span></font></div>
<div class=MsoNormal align=center style='text-align:center'><font size=2
face=Arial><span style='font-size:10.0pt;font-family:Arial'>
<hr size=3 width="100%" align=center>
</span></font></div>
<p class=MsoNormal><strong><b><font size=2 face=Arial><span style='font-size:
10.0pt;font-family:Arial'>Attention: </span></font></b></strong><font size=2
face=Arial><span style='font-size:10.0pt;font-family:Arial'><br>
<font color=gray><span style='color:gray'>This mail and any attachments are for
the use of the intended recipient only, and may contain information which is
confidential and/or privileged. If you have received this email in error,
please advise us by return email and immediately delete this email together
with all attachments. The contents of this email may only be used, distributed
or copied with the consent of the author. Fairview Metal Industries Ltd takes
reasonable precautions to minimise the risk of this email containing any
viruses but does not accept liability for any damage caused by software viruses
and advises the recipient to carry out their own virus check on any
attachments.</span></font><o:p></o:p></span></font></p>
<div class=MsoNormal align=center style='text-align:center'><font size=2
face=Arial><span style='font-size:10.0pt;font-family:Arial'>
<hr size=3 width="100%" align=center>
</span></font></div>
</div>
<FONT size=2 face=Arial>
<P>
<HR>
<STRONG>Attention: </STRONG><BR><FONT color=#808080>This mail and any
attachments are for the use of the intended recipient only, and may contain
information which is confidential and/or privileged. If you have received this
email in error, please advise us by return email and immediately delete this
email together with all attachments. The contents of this email may only be
used, distributed or copied with the consent of the author. </FONT><FONT
color=#808080>Fairview Metal Industries Ltd takes reasonable precautions to
minimise the risk of this email containing any viruses but does not accept
liability for any damage caused by software viruses and advises the recipient to
carry out their own virus check on any attachments.<BR></FONT></FONT><FONT
size=2 face=Arial>
<HR>
</FONT>
<P></P>
<P></P>
</body>
</html>