IShellLibrary
에서 폴더를 추가하고 제거하는 두 가지 함수를 작성하려고합니다. 나는이 시작되지만 기능은 System._IntfClear
에서 예외를 생성합니다IShellLibrary에서 폴더 추가, 제거
첫 번째 예외를 $ 000007FEFE 168BC4에서. 'c0000005 ACCESS_VIOLATION'메시지가있는 예외 클래스 $ C0000005.
SHAddFolderPathToLibrary
은 예외의 원인이되는 행입니다.
나는 함수에 라이브러리 이름을 추가해야 할 것 같니? 여기
function AddFolderToLibrary(AFolder: string): HRESULT;
{ Add AFolder to Windows 7 library. }
var
plib: IShellLibrary;
begin
Result := CoCreateInstance(CLSID_ShellLibrary, nil, CLSCTX_INPROC_SERVER,
IID_IShellLibrary, plib);
if SUCCEEDED(Result) then
begin
Result := SHAddFolderPathToLibrary(plib, PWideChar(AFolder));
end;
end;
function RemoveFolderFromLibrary(AFolder: string): HRESULT;
{ Remove AFolder from Windows 7 library. }
var
plib: IShellLibrary;
begin
Result := CoCreateInstance(CLSID_ShellLibrary, nil, CLSCTX_INPROC_SERVER,
IID_IShellLibrary, plib);
if SUCCEEDED(Result) then
begin
Result := SHRemoveFolderPathFromLibrary(plib, PWideChar(AFolder));
end;
end;
@Ken : 내 편집을 참조하십시오. – Bill
$ 000007FEFE 168BC4의 첫 번째 기회 예외. 'c0000005 ACCESS_VIOLATION'메시지가있는 예외 클래스 $ C0000005. – Bill
@Tlama가 SHAddFolderPathToLibrary 구현을보고 있습니다 - 왜'(psiFolder : IShellItem) ._ Release()'가 명시 적으로 호출 되었습니까? 어쩌면'plib._Release()'호출도 필요합니까? –