<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
The Windows API doesn't understand what an 'AnsiString' is and cannot resize it dynamically like FreePascal would do as it is used.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
You need to use something like</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
buf: array[0..512] of char;</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="background-color:rgb(255, 255, 255);display:inline !important"><br>
</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="background-color:rgb(255, 255, 255);display:inline !important">TFileName.nMaxFile := sizeof(buf);</span><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
But then you should also handle the possibility that the dir is greater than 512 and allocate a bigger buffer as needed.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
So maybe dynamically allocating the space would be better.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div>
<div id="Signature">
<div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
--</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Alexander Grotewohl</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
https://dcclost.com</div>
</div>
</div>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> fpc-pascal <fpc-pascal-bounces@lists.freepascal.org> on behalf of James Richters via fpc-pascal <fpc-pascal@lists.freepascal.org><br>
<b>Sent:</b> Friday, June 18, 2021 1:56 PM<br>
<b>To:</b> 'FPC-Pascal users discussions' <fpc-pascal@lists.freepascal.org><br>
<b>Cc:</b> James Richters <james.richters@productionautomation.net><br>
<b>Subject:</b> [fpc-pascal] GetSaveFileNameA limited to 100 characters in default name</font>
<div> </div>
</div>
<style>
<!--
@font-face
        {font-family:"Cambria Math"}
@font-face
        {font-family:Calibri}
p.x_MsoNormal, li.x_MsoNormal, div.x_MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif}
a:link, span.x_MsoHyperlink
        {color:#0563C1;
        text-decoration:underline}
a:visited, span.x_MsoHyperlinkFollowed
        {color:#954F72;
        text-decoration:underline}
span.x_EmailStyle17
        {font-family:"Calibri",sans-serif;
        color:windowtext}
span.x_SpellE
        {}
.x_MsoChpDefault
        {font-family:"Calibri",sans-serif}
@page WordSection1
        {margin:1.0in 1.0in 1.0in 1.0in}
div.x_WordSection1
        {}
-->
</style>
<div lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="x_WordSection1">
<p class="x_MsoNormal">I’m using <span class="x_SpellE">GetSaveFileNameA</span>() in a windows console program to obtain a save-as directory and file name, I am passing
<span style=""> </span>sending it a default file name with:</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal"><span class="x_SpellE">TFileName.lpstrFile</span>:=<span class="x_SpellE">Pchar</span>(<span class="x_SpellE">DefaultFileName</span>);</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal"><span class="x_SpellE">DefaultFileName</span> is an <span class="x_SpellE">
AnsiString</span> that contains a full path and filename.</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">This all works fine as long as <span class="x_SpellE">DefaultFileName</span> is 100 characters or less,<span style=""> 
</span>if it’s 101 or more, then <span class="x_SpellE">GetSaveFileNameA</span>() never opens a dialog box and just returns False;</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">Does anyone know where the 100 character limit is coming from?<span style=""> 
</span></p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal"><span class="x_SpellE">TFileName.lpstrFile</span> is a <span class="x_SpellE">
PChar</span>, and <span class="x_SpellE">DefaultFileName</span> is an <span class="x_SpellE">
AnsiString</span>, Neither of which have a length limit that I know of…</p>
<p class="x_MsoNormal">I am doing a <span class="x_SpellE">Writeln</span> if Both
<span class="x_SpellE">DefaultFileName</span> and <span class="x_SpellE">TFileName.lpstrFile</span> and they both match, nothing is being truncated.<span style=""> 
</span></p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">James</p>
</div>
</div>
</body>
</html>