안녕하세요..^^
요즘..Shell API를 공부하고 있는 델파이..초보입니다..^^
질문 내용은 아래와 같습니다.. 많은 도움 부탁드립니다.. -_-;;
예를 들어 아래와 같은 간단한 함수를 만들어 봤는데요..
function Form1.GetPath : string;
var
bi : TBrowseInfo;
folder : PItemIDList;
directory : PChar;
begin
ZeroMemory(@bi, SizeOf(TBrowseInfo));
bi.hwndOwner := Self.Handle;
folder := SHBrowseForFolder(bi);
SHGetPathFromIDList(folder, directory);
Result := StrPas(directory);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetPath);
end;
실행을 시켜보면 ShowMessage가서 디렉토리 표시하는데까지는 잘 갑니다..
근데..OK 하면...
어쩔때는 잘 됩니다.. 근뎅.. 어쩔때는 꼭 에러가 나걸랑요.. -_-;;
공포의 에러메시지... Access violatoin 어쩌구..저쩌구.. T.T;;
SHGetPathFromIDList 함수와 연관이 있는거..같은데..잘..몰겠어용..
왜..이런..걸까여?? 갈카주세요..고수님들.. ^^;;
이만... ^^
에러입니다... 함수 호출전에 PChar(directory)의 메모리를 할당받아야
합니다. 그렇지 않으면 에러가 생길수도 있고 안생길수도 있는 잠재적인
위험을 감수해야하죠... 먼저 충분한 메모리를 할당받으세요. 그리고 끝
나면 꼭 프리해주는거 잊지마시고...
할당 - GetMem(Directory, MaxDirPathSize);
해제 - FreeMem(Directory, MaxDirPathSize);
궁금이 wrote:
> 안녕하세요..^^
> 요즘..Shell API를 공부하고 있는 델파이..초보입니다..^^
> 질문 내용은 아래와 같습니다.. 많은 도움 부탁드립니다.. -_-;;
>
> 예를 들어 아래와 같은 간단한 함수를 만들어 봤는데요..
>
> function Form1.GetPath : string;
> var
> bi : TBrowseInfo;
> folder : PItemIDList;
> directory : PChar;
> begin
> ZeroMemory(@bi, SizeOf(TBrowseInfo));
> bi.hwndOwner := Self.Handle;
> folder := SHBrowseForFolder(bi);
> SHGetPathFromIDList(folder, directory);
> Result := StrPas(directory);
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> ShowMessage(GetPath);
> end;
>
> 실행을 시켜보면 ShowMessage가서 디렉토리 표시하는데까지는 잘 갑니다..
> 근데..OK 하면...
> 어쩔때는 잘 됩니다.. 근뎅.. 어쩔때는 꼭 에러가 나걸랑요.. -_-;;
> 공포의 에러메시지... Access violatoin 어쩌구..저쩌구.. T.T;;
> SHGetPathFromIDList 함수와 연관이 있는거..같은데..잘..몰겠어용..
> 왜..이런..걸까여?? 갈카주세요..고수님들.. ^^;;
>
> 이만... ^^