Hallo,
hier wird meine Funktion aufgerufen:
Delphi-Quellcode:
procedure TForm2.Button4Click(Sender: TObject);
var Text: string;
begin
Text := ShowBrowseForFolder(Form2.Handle);
if Text <> '' then Edit1.Text := Text;
end;
Die Funktion liegt in einer anderen
Unit:
Delphi-Quellcode:
function ShowBrowseForFolder(
Handle: HWND):
string;
var
Allocator: IMalloc;
BrowseInfo: TBrowseInfo;
Path: PChar;
PIDL: PItemIDList;
begin
Result := '
';
if SHGetMalloc(Allocator) = NOERROR
then
begin
GetMem(Path,MAX_PATH);
with BrowseInfo
do
begin
hwndOwner :=
Handle;
pidlRoot :=
nil;
pszDisplayName := @Path;
lpszTitle := PChar(Cap_Browse_For_Folder);
ulFlags := BIF_DONTGOBELOWDOMAIN
or BIF_RETURNONLYFSDIRS;
lParam := 0;
lpfn :=
nil;
iImage := 0;
end;
PIDL := SHBrowseForFolder(BrowseInfo);
if PIDL <>
nil then
begin
if SHGetPathFromIDList(PIDL, Path)
then //HIER EXCEPTION
Result :=
string(Path);
end;
Allocator.Free(PIDL);
FreeMem(Path);
end;
end;
Wenn ich nun in irgendeiner Form auf die zurückgelieferte PIDL zugreife gibt es eine EAccessViolation. (zur Laufzeit natürlich)
Liegt das Problem am
Handle? Die PIDL hat natürlich einen Wert. Auch wenn ich sie vorher 'nille'.