Я пытаюсь написать две функции, которые добавляют и удаляют папку из IShellLibrary
. Я начал с этого, но функция создает исключение в System._IntfClear
:Добавить, удалить папку из IShellLibrary
Первое исключение случайности в $ 000007FEFE 168BC4. Класс исключения $ C0000005 с сообщением 'c0000005 ACCESS_VIOLATION'.
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 с сообщением 'c0000005 ACCESS_VIOLATION'. – Bill
@Tlama смотрит на реализацию SHAddFolderPathToLibrary - почему '' (psiFolder: IShellItem) ._ Release() 'явно называется там? возможно, требуется вызов 'plib._Release()'? –