Beim Versuch einen Auswahldialog für ein Verzeichnis zu erstellen, wollte der Compiler zuerst nicht complilieren.
AnsiString s; SelectDirectory( s, TSelectDirOpts(), 0 );
Das wurde ganz einfach mit folgendem Fehler abgelehnt:
[BCC32 Fehler] UnitMain.cpp(28): E2285 Keine Übereinstimmung für 'SelectDirectory(AnsiString,TSelectDirOpts,int)' gefunden Vollständiger Parser-Kontext UnitMain.cpp(24): Analyse: void _fastcall TFormMain::ButtonBrowseClick(TObject *)
Ein Blick in den Header Vcl.FileCtrl.hpp hat dann auch gleich auf die Antwort hingewiesen:
extern PACKAGE bool __fastcall SelectDirectory( System::UnicodeString &Directory, TSelectDirOpts Options, int HelpCtx)/* overload */; extern PACKAGE bool __fastcall SelectDirectory( const System::UnicodeString Caption, const System::WideString Root, System::UnicodeString &Directory, TSelectDirExtOpts Options = (TSelectDirExtOpts() << TSelectDirExtOpt::sdNewUI ), Vcl::Controls::TWinControl* Parent = (Vcl::Controls::TWinControl*)(0x0))/* overload */;
Lösung: Verzeichnisname muss vom Typ UnicodeString sein.
UnicodeString s; SelectDirectory( s, TSelectDirOpts(), 0 );
Anmerkung: SelectDirectory wirft den selben Fehler, wenn anstelle eines AnsiString einfach nur eine Property Variable übergeben wird:
__property System::UnicodeString s {...