Sorry Bob, I meant to include an example of your code tweaked to use “raw” a char array with the Windows API routine. Here it is (this version displays results rather than storing in a variable, but you get the idea J ) :
var dir: array of Char; s: String; begin s := ‘’; SetLength(dir, MAX_PATH + 1); if Succeeded(SHGetFolderPath(0, CSIDL_Program_Files, 0, 0, @dir[0])) then s := PChar(dir); ShowMessageFmt(s + ' (%d chars)', [Length(s)]); // Outcome: s has both the right length *and* is null terminated correctly end; From: delphi-boun...@delphi.org.nz [mailto:delphi-boun...@delphi.org.nz] On Behalf Of Bob Pawley Sent: Monday, 27 June 2011 08:58 To: 'NZ Borland Developers Group - Delphi List' Subject: Re: [DUG] Variable in String Hi Jolyon I was wondering if my problem is a conflict between how I derive the value of the variable (PAnsiChar). Here is the code for doing that. SetLength(sDir, MAX_PATH); ZeroMemory(@sDir[1], MAX_PATH); if Succeeded(SHGetFolderPath(0, CSIDL_Program_Files, 0, 0, PAnsiChar(sDir))) then FW_Path := sDir; Bob From: Jolyon Smith <mailto:jsm...@deltics.co.nz> Sent: Wednesday, June 22, 2011 3:49 PM To: 'NZ Borland Developers Group - Delphi List' <mailto:delphi@delphi.org.nz> Subject: Re: [DUG] Variable in String Don’t quote FW_Path element of the program path – you need to quote the entire path AND program file name when/if any part of the path or the filename itself does – or may – contain spaces: e.g. “path a\sub a\sub b\prog.exe” not “path a”\sub\prog.exe So in your case, this should do the trick: FW_Path := X; DXF := openDialog1.FileName; ProgramName := ‘”’ + FW_Path + '\FWTools2.4.7\bin\ogr2ogr” "-f" "PostgreSQL" PG:"host=192........ user=postgres dbname=E5R password=........" "'+ DXF +'" -nln Import_Process'; ShowMessage(ProgramName); hth From: delphi-boun...@delphi.org.nz [mailto:delphi-boun...@delphi.org.nz] On Behalf Of Bob Pawley Sent: Thursday, 23 June 2011 10:30 To: DUG Subject: [DUG] Variable in String Hi I’m having trouble with using a variable in a string path. 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 . When I reference FW_Path to a variable X I get an error returned “Can Not run....” The variable X is returned as C:\Program Files (x86) without quotes. I attempted Quote String and got the following ‘C:\Program Files (x86) with one single quote. Both cases return the same error - and in both cases ShowMessage(ProgramName); displayed none of the path after C:\Program Files (x86). Help would be appreciated. Bob FW_Path := QuoteStr(X); DXF := openDialog1.FileName; ProgramName :=FW_Path+'\FWTools2.4.7\bin\ogr2ogr "-f" "PostgreSQL" PG:"host=192........ user=postgres dbname=E5R password=........" "'+ DXF +'" -nln Import_Process'; ShowMessage(ProgramName); _____ _______________________________________________ NZ Borland Developers Group - Delphi mailing list Post: delphi@delphi.org.nz Admin: http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: unsubscribe
_______________________________________________ NZ Borland Developers Group - Delphi mailing list Post: delphi@delphi.org.nz Admin: http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: unsubscribe