<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:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 12 (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]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        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","serif";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:16198212;
        mso-list-type:hybrid;
        mso-list-template-ids:-511820070 336134161 336134169 336134171 336134159 336134169 336134171 336134159 336134169 336134171;}
@list l0:level1
        {mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></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-NZ link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Well, setting aside the obfuscation of burying the real work of the routine as a side effect of code that exists merely to provide the scaffolding required to make that call, this code actually contains an error:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>   setlength(temp, 100); //has to be big enough first<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>   setlength(temp, getEnvironmentVariable(PChar('USERNAME'), PChar(temp), </span><b><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:red'>length(temp)</span></b><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>));<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Since <b>GetEnvironmentVariable()</b> works with a plain null terminated buffer, the length of the buffer that you indicate in the call to it needs to reflect the expected presence of that terminator in the buffer.  But the null terminator on a <b>String</b> type variable is <i>implicit</i>, and not part of the payload and so not reflected in the length.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>If the USERNAME were exactly 100 characters in length, your call to GetEnvironmentVariable() would fail, even though the buffer you are passing is actually the right size.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>i.e.  you should actually call<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>   getEnvironmentVariable(PChar('USERNAME'), PChar(temp), </span><b><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:red'>length(temp) + 1</span></b><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>)</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>This to my mind perfectly illustrates the problem: treating one type (a string) as if it were another in a situation where the differences are actually important.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Passing a String value to an external routine that simple READS from a null terminated buffer is much more straightforward and less error prone (imho – due to being reminded of what you are working with by the very <b>nature</b> of what you are working with) than trying to pass a pointer which is actually an offset into a complex String type to a function that expects to modify a plain null terminated buffer.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>When <b>reading</b> from a string, the payload can be safely naively regarded as a null terminated buffer by a function that is unaware of the greater complexity of the type of value it is actually being passed.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>But when <b>writing</b> to a null terminated buffer, there be dragons when that buffer isn’t <b>just</b> a null terminated buffer but actually the payload of a far more complex type.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>If an external routine expected a pointer to an unsigned 32 bit value I doubt you would consider it sensible to contrive to pass a pointer to an signed 16-bit variable, even if you always got the desired results (at least, up to now... ).  </span><span style='font-size:11.0pt;font-family:Wingdings;color:#1F497D'>J</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> delphi-bounces@delphi.org.nz [mailto:delphi-bounces@delphi.org.nz] <b>On Behalf Of </b>John Bird<br><b>Sent:</b> Wednesday, 29 June 2011 13:19<br><b>To:</b> NZ Borland Developers Group - Delphi List<br><b>Subject:</b> Re: [DUG] Variable in String<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>Jolyon I imagine you have an opinion on doing this your way rather than like this example below – I would be interested in hearing your reasoning.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>A similar example – this is the sort of code I have been using....<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>setlength(temp, 100); //has to be big enough first<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>setlength(temp, getEnvironmentVariable(PChar('USERNAME'), PChar(temp), length(temp)));<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>John<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>&nbsp;<o:p></o:p></span></p></div><div><div><p class=MsoNormal><b><span style='font-family:"Calibri","sans-serif";color:black'>From:</span></b><span style='font-family:"Calibri","sans-serif";color:black'> <a href="mailto:jsmith@deltics.co.nz" title="jsmith@deltics.co.nz">Jolyon Smith</a> <o:p></o:p></span></p></div><div><div><div><p class=MsoNormal style='background:whitesmoke'><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>Sent:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'> Monday, June 27, 2011 10:07 AM<o:p></o:p></span></p></div><div><p class=MsoNormal style='background:whitesmoke'><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>To:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'> <a href="mailto:delphi@delphi.org.nz" title="delphi@delphi.org.nz">'NZ Borland Developers Group - Delphi List'</a> <o:p></o:p></span></p></div><div><p class=MsoNormal style='background:whitesmoke'><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>Subject:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'> Re: [DUG] Variable in String<o:p></o:p></span></p></div></div></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>&nbsp;<o:p></o:p></span></p></div></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Sorry Bob, I meant to include an example of your code tweaked to use “raw” a char array with the Windows API routine.&nbsp; Here it is (this version displays results rather than storing in a variable, but you get the idea </span><span style='font-size:11.0pt;font-family:Wingdings;color:#1F497D'>J</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> ) :<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>var<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>&nbsp; dir: array of Char;<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>&nbsp; s: String;<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>begin<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>&nbsp; s := ‘’;<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:9.0pt;font-family:"Courier New";color:black'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>&nbsp; SetLength(dir, MAX_PATH + 1);<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>&nbsp; if Succeeded(SHGetFolderPath(0, CSIDL_Program_Files, 0, 0, @dir[0])) then<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; s := PChar(dir);<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:9.0pt;font-family:"Courier New";color:black'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>&nbsp; ShowMessageFmt(s + ' (%d chars)', [Length(s)]);<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:9.0pt;font-family:"Courier New";color:black'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>&nbsp; // Outcome:&nbsp; s has both the right length *<b>and</b>* is null terminated correctly<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";color:black'>end;<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'> delphi-bounces@delphi.org.nz [mailto:delphi-bounces@delphi.org.nz] <b>On Behalf Of </b>Bob Pawley<br><b>Sent:</b> Monday, 27 June 2011 08:58<br><b>To:</b> 'NZ Borland Developers Group - Delphi List'<br><b>Subject:</b> Re: [DUG] Variable in String<o:p></o:p></span></p></div></div><p class=MsoNormal><span style='color:black'>&nbsp;<o:p></o:p></span></p><div><div><div><p class=MsoNormal><span style='color:#00002B'>Hi Jolyon<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>I was wondering if my problem is a conflict between how I derive the value of the variable (PAnsiChar).<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>Here is the code for doing that.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>SetLength(sDir, MAX_PATH);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>ZeroMemory(@sDir[1], MAX_PATH);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>if Succeeded(SHGetFolderPath(0, CSIDL_Program_Files, 0, 0, PAnsiChar(sDir))) then<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>FW_Path := sDir;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>Bob<o:p></o:p></span></p></div><div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>&nbsp;<o:p></o:p></span></p></div><div><div><p class=MsoNormal style='background:whitesmoke'><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'> <a href="mailto:jsmith@deltics.co.nz" title="jsmith@deltics.co.nz">Jolyon Smith</a> <o:p></o:p></span></p></div><div><p class=MsoNormal style='background:whitesmoke'><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>Sent:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'> Wednesday, June 22, 2011 3:49 PM<o:p></o:p></span></p></div><div><p class=MsoNormal style='background:whitesmoke'><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>To:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'> <a href="mailto:delphi@delphi.org.nz" title="delphi@delphi.org.nz">'NZ Borland Developers Group - Delphi List'</a> <o:p></o:p></span></p></div><div><p class=MsoNormal style='background:whitesmoke'><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>Subject:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'> Re: [DUG] Variable in String<o:p></o:p></span></p></div></div></div><div><p class=MsoNormal><span style='font-family:"Calibri","sans-serif";color:black'>&nbsp;<o:p></o:p></span></p></div></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Don’t quote FW_Path element of the program path – you need to quote the <u>entire</u> path AND program file name when/if any <u>part</u> of the path or the filename itself does – or may – contain spaces:<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>e.g.&nbsp;&nbsp; “path a\sub a\sub b\prog.exe”<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><u><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>not</span></u><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp; “path a”\sub\prog.exe<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>So in your case, this should do the trick:<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:#00002B'>&nbsp;&nbsp; FW_Path&nbsp;&nbsp;&nbsp;&nbsp; := X;&nbsp; <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:#00002B'>&nbsp;&nbsp; DXF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; := openDialog1.FileName;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:#00002B'>&nbsp;&nbsp; ProgramName := ‘”’ + FW_Path + '\FWTools2.4.7\bin\ogr2ogr” &quot;-f&quot; &quot;PostgreSQL&quot; PG:&quot;host=192........ user=postgres dbname=E5R password=........&quot; &quot;'+ DXF +'&quot; -nln Import_Process';<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:#00002B'>&nbsp;&nbsp; ShowMessage(ProgramName);<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>hth<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>&nbsp;</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:black'> delphi-bounces@delphi.org.nz [mailto:delphi-bounces@delphi.org.nz] <b>On Behalf Of </b>Bob Pawley<br><b>Sent:</b> Thursday, 23 June 2011 10:30<br><b>To:</b> DUG<br><b>Subject:</b> [DUG] Variable in String<o:p></o:p></span></p></div></div><p class=MsoNormal><span style='color:black'>&nbsp;<o:p></o:p></span></p><div><div><div><p class=MsoNormal><span style='color:#00002B'>Hi<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>I’m having trouble with using a variable in a string path.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>When I use the variable FW_Path := ‘C:\Program Files (x86)’ with two single quotes, the following works well and ShowMessage(ProgramName); displayed the full path ..<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>When I reference FW_Path to a variable X I get an error returned “Can Not run....” The variable&nbsp; X is returned as C:\Program Files (x86) without quotes. <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>I attempted Quote String and got the following ‘C:\Program Files (x86) with one single quote.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>Both cases return the same error - and in both cases ShowMessage(ProgramName); displayed none of the path after C:\Program Files (x86).<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>Help would be appreciated.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>Bob<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;&nbsp; FW_Path := QuoteStr(X);&nbsp; <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp; DXF&nbsp; := openDialog1.FileName;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp; ProgramName :=FW_Path+'\FWTools2.4.7\bin\ogr2ogr &quot;-f&quot; &quot;PostgreSQL&quot; PG:&quot;host=192........ user=postgres dbname=E5R password=........&quot; &quot;'+ DXF +'&quot; -nln Import_Process';<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:#00002B'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowMessage(ProgramName);<o:p></o:p></span></p></div></div></div><div class=MsoNormal align=center style='text-align:center'><span style='font-family:"Calibri","sans-serif";color:black'><hr size=2 width="100%" align=center></span></div><p class=MsoNormal><span style='font-family:"Calibri","sans-serif";color:black'>_______________________________________________<br>NZ Borland Developers Group - Delphi mailing list<br>Post: delphi@delphi.org.nz<br>Admin: http://delphi.org.nz/mailman/listinfo/delphi<br>Unsubscribe: send an email to delphi-request@delphi.org.nz with Subject: unsubscribe<o:p></o:p></span></p></div></div></div><div class=MsoNormal align=center style='text-align:center'><span style='font-family:"Calibri","sans-serif";color:black'><hr size=2 width="100%" align=center></span></div><p class=MsoNormal><span style='font-family:"Calibri","sans-serif";color:black'>_______________________________________________<br>NZ Borland Developers Group - Delphi mailing list<br>Post: delphi@delphi.org.nz<br>Admin: http://delphi.org.nz/mailman/listinfo/delphi<br>Unsubscribe: send an email to delphi-request@delphi.org.nz with Subject: unsubscribe<o:p></o:p></span></p></div></div></div></div></body></html>