| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Обработка содержимого Корзины. |
| Автор: AndreySol 12.6.2004, 05:28 |
| Вопрос по обработке содержимого Корзины. Помогите начинающему в Visual C++ и MFC. Недавно получил на форуме подсказку как поиметь содержимое Корзины. Привожу код полностью. //инициализируем КОМ CoInitialize(NULL); ITEMIDLIST* pidl; //получаем PIDL для Корзины HRESULT Result; Result = SHGetSpecialFolderLocation(NULL, CSIDL_BITBUCKET, &pidl); if(SUCCEEDED(Result)) { IShellFolder *df, *sf; //получаем интерфейс для Главной Папки Result = SHGetDesktopFolder(&df); if(SUCCEEDED(Result)) { // получаем интерфейс для Корзины Result = df-> BindToObject(pidl, NULL, IID_IShellFolder, (void**)&sf); if(SUCCEEDED(Result)) { IEnumIDList *ieidl; //список файлов в корзине, для папок надо флаг SHCONTF_FOLDERS и //для каждой папки повторить процедуру, имхо Result = sf -> EnumObjects(NULL, SHCONTF_NONFOLDERS, &ieidl); if(SUCCEEDED(Result)) { ITEMIDLIST* sfidl; ULONG Cnt = 0; while(ieidl -> Next(1, &sfidl, &Cnt) == NOERROR) { STRRET fName; //получаем стуктуру "описания" файла Result = sf -> GetDisplayNameOf(sfidl, SHGDN_NORMAL, &fName); if(SUCCEEDED(Result)) { TCHAR* pszName; //получаем полный путь и имя файла Result = StrRetToStr(&fName, sfidl, &pszName); if(SUCCEEDED(Result)) { // выводим куда нибудь //Это для билдера, для VC тоже // что-нибудь вроде этого CoTaskMemFree(pszName); } } } ieidl->Release(); } sf->Release(); } df->Release(); } IMalloc *im; Result=CoGetMalloc(1,&im); if(SUCCEEDED(Result)) { if(im->DidAlloc(pidl)==1) im->Free(pidl); im->Release(); } } CoUninitialize(); При сборке получаю - error C2065: 'StrRetToStr' : undeclared identifier Пошел в MSDN, там нашел эту ф-цию для нее написано: Header shlwapi.h Import library shlwapi.lib Подключил: в cpp - файле #include "shlwapi.h", а в настройках проекта "Link -> General -> Object\Library modules - shlwapi.lib Собираю опять - снова error C2065: 'StrRetToStr' : undeclared identifier Помогите ! Что не так делаю ? На всякий случай - у меня WinMe и Visual C++ 6.0 + SP 5. Заранее спасибо за ответы и подсказки. |
| Автор: Олег М 15.6.2004, 12:54 |
| В Vc.net вроде всё нормально. У тебя линкер даёт ошибку или компилятор? |
| Автор: AndreySol 16.6.2004, 05:23 |
| Олегу М. На другом форуме получил такой ответ на мой вопрос: "А ты в хедер заглядывал? Я так думаю, что там этого определния нет... А появится оно там после установки Platform SDK. Поэтому, можешь просто где-нить в исходнике объявить эту функцию: #ifndef StrRetToStr HRESULT StrRetToStr( LPSTRRET pstr, LPCITEMIDLIST pidl, LPTSTR *ppszName ); #endif Чтобы собиралось как с Platform SDK, так и без него, описание функции внесем под условный define". Буду пробовать. Всем спасибо. |
| Автор: Олег М 16.6.2004, 06:03 |
| В том то и дело, что для начала я заглянул в заголовок в VC60. Устанавливать студию просто не стал. Всё там есть. |
| Автор: AndreySol 26.8.2004, 05:39 |
| Получилось как подсказали, все работает. |