Hallo,
ich möchte den JvBrowseForFolderDialog aus der JVCL in einer
DLL Funktion verwenden.
In der Funktion übergebe ich eine Referenz auf ein array of Char und gebe in der gleichen Variable den ausgewählten Ordner zurück.
Delphi-Quellcode:
function OpenFolderDialog(Title, StatusText: PChar;
var FolderName: array of Char): Integer; stdcall;
var dlgOrdner: TJvBrowseForFolderDialog;
LFolder: String;
begin
Result := 0;
dlgOrdner := TJvBrowseForFolderDialog.Create(nil);
try
dlgOrdner.Title := Title;
dlgOrdner.StatusText := StatusText;
LFolder := PChar(@FolderName);
LFolder := Trim(LFolder);
if LFolder <> '' then
dlgOrdner.Directory := LFolder;
if dlgOrdner.Execute then begin
Result := 1;
LFolder := ConvertPathToUNC(dlgOrdner.Directory);
end; // end if
FillChar(FolderName, StrLen(FolderName), #0);
StrCopy(FolderName, PChar(LFolder));
finally
dlgOrdner.Free;
end; // finally
end;
Diese Variable enthält nach dem Aufruf von Execute aber immer den Wert, der an die Variable übergeben wurde.
Auch wenn ich der Variable irgendeinen Wert zuweise, z.B.:
StrCopy(FolderName, 'abc');
kommt es aufs gleiche raus. Nur wenn ich JvBrowseForFolderDialog.Execute
NICHT aufrufe funktioniert es.
Wenn ich das gleiche z.B. mit TjvSaveDialog mache funktioniert auch alles.
Liegts vielleicht daran, dass in JvBrowseForFolderDialog irgendwas aus der
Unit ActiveX verwendet wird?
Danke