Microsoft KB Archive/110185

= PRB: Common Dialog Open: Err=20476 Buffer lpstrFile Too Small =

Article ID: 110185

Article Last Modified on 10/30/2003

-

APPLIES TO


 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 3.0 Professional Edition

-



This article was previously published under Q110185



SYMPTOMS
The following behavior occurs with the Open file dialog box of the Common Dialog custom control when you set the Flags property to &H200& or OFN_ALLOWMULTISELECT, to allow selection of more than one file at once.

If you highlight more than about 20 files at once in the Open file dialog box, the following error message displays when you click the OK button:

The buffer at which the member lpstrFile points is too small.

Or, if error trapping is on, the Err function reports error number 20476.

In the Visual Basic environment, if you press F5 or choose Continue from the Run menu after getting this error, you get the following error message:

Invalid filename.



CAUSE
This behavior occurs when the length of the Open dialog string containing the file names exceeds 256, the default MaxFileSize property value.



RESOLUTION
To resolve the problem, increase the MaxFileSize property to 2048:

CMDialog1.MaxFileSize = 2048

2048 is the maximum string size for the Common Dialog File-Open box. 256 is the default.



STATUS
This behavior is by design.



MORE INFORMATION
You can set the Flags property of the Common Dialog to &H200&, or OFN_ALLOWMULTISELECT, to allow multiple selections in the File Name list box. You can select more than one file at run time by pressing the SHIFT key and using the UP and DOWN ARROW keys to select the desired files. The FileName property returns a string containing the names of all selected files. The names in the string are delimited by spaces.

Steps to Reproduce Behavior
 Start a new project in Visual Basic. Form1 is created by default.

If the common dialog CMDIALOG.VBX file is not automatically loaded by AUTOLOAD.MAK in Visual Basic, load CMDIALOG.VBX as follows: choose Add File from the File menu, and select CMDIALOG.VBX from your WINDOWS\SYSTEM directory. Add a Common Dialog custom control to Form1.  Add the following to the Form Load event code: Sub Form_Load CMDialog1.Flags = &H200&  ' Allows selection of more than 1 file. CMDialog1.Filter = "ALL|*.*"  ' File types to list in file box. ' CMDialog1.MaxFileSize = 2048 ' Add this to correct the behavior. CMDialog1.Action = 1     ' Action 1 = standard Open file dialog box End Sub

 Start the program (or press F5). Select 20 or files at once by selecting the first article then pressing SHIFT+END. That highlights all files down to the last article. Choose the OK button. The following error message displays if the number of characters in all the selected file names, plus one character for each file name, exceeds 256:

The buffer at which the member lpstrFile points is too small.

If error trapping (On Error Goto) is on, the Err function reports error number 20476. In the Visual Basic environment, if you press F5 or choose Continue from the Run menu after getting this error, you get the following error message:

Invalid filename.



To improve this behavior, add the CMDialog1.MaxFileSize=2048 statement before setting the CMDialog1 Action property to 1. This increases the maximum allowed returned string size from 256 to 2048.

<div class="references_section">