먼저 답변에 너무 감사드려요. 사실 어떻게 해야 하나 막막하던 때라..
제가 해본 것은
SHGetDesktopFolder(ShellFolder);
로 해서 ishellfolder를 얻어오고
ShellFolder.EnumObjects(hwndOwner, SHCONTF_FOLDERS, EnumIDList);
를 통해서 각 트리의 이름을 얻어오는 것 까지는 했거든요.
그런데
function BindToObject(pidl: PItemIDList; pbcReserved: Pointer;
const riid: TIID; out ppvOut: Pointer): HResult; stdcall;
function BindToStorage(pidl: PItemIDList; pbcReserved: Pointer;
const riid: TIID; out ppvObj: Pointer): HResult; stdcall;
의 파라미터를 무엇을 넣어야 하는지 정확치가 않아요.
pidl은 sub folder의 정보를 넣어서 넘겨야 하는지요?
riid는 GUID를 적으면될 것 같은데 pcbReserverd는 pointer로 무슨 값을 넣어
야 하는지 모르겠어요. out으로 넘어오는 ppvOut도 마찬가지이구요.
설명을 좀 부탁드릴께요.
Namespace extension은 Shell extension과 달리 반드시 IShellFolder, IPersistFolder,
IShellView를 구현해 주어야야하는데 SHGetDesktopFolder를 이용해서 IShellFolder를
얻는다는 것은 말이 안돼는군요...
위에서 얻은 IShellFoler는 이은주님의 IShellFolder가 아니라 탐색기의 IShellFolder
객체입니다. 그러므로 여기에서 EnumObjects를 이용해서 트리를 얻을 수는 있어도
이은주님의 서브트리는 넣을 수 업습니다.
그리고 IShellFolder의 메소드들을 이은주님이 구현하여 일단 등록을 하면
탐색기가 필요하다고 생각되면 알아서 인자를 넣어 호출합니다. 그러한 메소드들의
호출은 탐색기 가 알아서 해주므로 신경쓸 필요는 없고 다만 그것을 정확하게 구현
해주어야 하죠..
이은주 wrote:
> 먼저 답변에 너무 감사드려요. 사실 어떻게 해야 하나 막막하던 때라..
>
> 제가 해본 것은
> SHGetDesktopFolder(ShellFolder);
> 로 해서 ishellfolder를 얻어오고
> ShellFolder.EnumObjects(hwndOwner, SHCONTF_FOLDERS, EnumIDList);
> 를 통해서 각 트리의 이름을 얻어오는 것 까지는 했거든요.
> 그런데
>
> function BindToObject(pidl: PItemIDList; pbcReserved: Pointer;
> const riid: TIID; out ppvOut: Pointer): HResult; stdcall;
> function BindToStorage(pidl: PItemIDList; pbcReserved: Pointer;
> const riid: TIID; out ppvObj: Pointer): HResult; stdcall;
>
> 의 파라미터를 무엇을 넣어야 하는지 정확치가 않아요.
>
> pidl은 sub folder의 정보를 넣어서 넘겨야 하는지요?
>
> riid는 GUID를 적으면될 것 같은데 pcbReserverd는 pointer로 무슨 값을 넣어
>
> 야 하는지 모르겠어요. out으로 넘어오는 ppvOut도 마찬가지이구요.
>
> 설명을 좀 부탁드릴께요.
>
>
>