На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Распаковка zip средствами WinXP. , zipfldr.dll
    В WinXP есть zipfldr.dll, она судя по всему является COM сервером. Ни кто не знает как распаковывать с помощью её интерфейсов файлы ??
      Цитата Jenya @
      В WinXP есть zipfldr.dll, она судя по всему является COM сервером. Ни кто не знает как распаковывать с помощью её интерфейсов файлы ??

      В любом случае гораздо быстрее надёжнее проще и удобнее встроить распаковщик в своё приложение, нежели пытаться получить доступ к этому.
        Я нашел описание здесь(http://www.autohotkey.com/forum/topic19831.html&highlight=zipfldr) однако не понятно
        каким образом с помощью IID_IShellDispatch(у них IID_IShell) распаковываются файлы, такое ощущение, что архив рассматривается как папка проводника.
          Отвечу сам себе :


          Вот пример распаковки файла readme.txt из архива file.zip , если в системе зарегистрирован zipfldr.dll

          ExpandedWrap disabled
                     OleInitialize(NULL);
             
                char cInPath[]="c:\\file.zip\\readme.txt";
                    char cOutPath[]="c:\\13";
                int nLen;
                BSTR bstrZip,bstrFol;
                HRESULT hres;
             
                 IShellDispatch *pSD = NULL;
                 Folder* pZipFolder = NULL;
                      Folder* pOutFolder = NULL;
             
                 hres=CoCreateInstance(CLSID_Shell, NULL, CLSCTX_SERVER,IID_IShellDispatch, (LPVOID *) &pSD);
                
                 if (SUCCEEDED(hres))
                 {
                     VARIANT vZipDir,vOutDir,vOptions;
                    
                               VariantInit(&vZipDir);
                     vZipDir.vt = VT_BSTR;
                     nLen = (lstrlen(cInPath) + 1) * sizeof(WCHAR);
                     bstrZip = SysAllocStringByteLen(NULL,nLen);
                    
                     MultiByteToWideChar(CP_ACP,0,cInPath,-1,bstrZip,nLen);
                     vZipDir.bstrVal = bstrZip;
                
                     VariantInit(&vOutDir);
                     vOutDir.vt = VT_BSTR;
                     nLen = (lstrlen(cOutPath) + 1) * sizeof(WCHAR);
                     bstrFol = SysAllocStringByteLen(NULL, nLen);
             
                     MultiByteToWideChar(CP_ACP,0,cOutPath,-1,bstrFol,nLen);
                     vOutDir.bstrVal = bstrFol;
                    
                     if (SUCCEEDED(pSD->NameSpace(vOutDir,&pOutFolder)))
                     {
                         //Опции
                         VariantInit(&vOptions);
                         vOptions.vt=VT_I4;
                         vOptions.lVal=0;
                    
                         hres=pOutFolder->CopyHere(vZipDir,vOptions);
             
                         pOutFolder->Release();
                        
                         VariantClear(&vOptions);
                     }
                    
                     pSD->Release();
             
                     SysFreeString(bstrZip);
                     VariantClear(&vZipDir);
                
                     SysFreeString(bstrFol);
                     VariantClear(&vOutDir);
             
             
                 }
            Вот здесь тоже есть ответ: https://www.cyberforum.ru/post6183877.html
              Больше чем на 17 лет опоздали
                Цитата macomics @


                Как говорится лучше поздно чем никогда ;)
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0386 ]   [ 15 queries used ]   [ Generated: 14.06.25, 21:48 GMT ]