
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
Сообщ.
#1
,
|
|
|
В WinXP есть zipfldr.dll, она судя по всему является COM сервером. Ни кто не знает как распаковывать с помощью её интерфейсов файлы ??
|
Сообщ.
#2
,
|
|
|
Цитата Jenya @ В WinXP есть zipfldr.dll, она судя по всему является COM сервером. Ни кто не знает как распаковывать с помощью её интерфейсов файлы ?? В любом случае гораздо быстрее надёжнее проще и удобнее встроить распаковщик в своё приложение, нежели пытаться получить доступ к этому. |
Сообщ.
#3
,
|
|
|
Я нашел описание здесь(http://www.autohotkey.com/forum/topic19831.html&highlight=zipfldr) однако не понятно
каким образом с помощью IID_IShellDispatch(у них IID_IShell) распаковываются файлы, такое ощущение, что архив рассматривается как папка проводника. |
Сообщ.
#4
,
|
|
|
Отвечу сам себе :
Вот пример распаковки файла readme.txt из архива file.zip , если в системе зарегистрирован zipfldr.dll ![]() ![]() 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); } |
Сообщ.
#5
,
|
|
|
Вот здесь тоже есть ответ: https://www.cyberforum.ru/post6183877.html
|
Сообщ.
#6
,
|
|
|
Больше чем на 17 лет опоздали
|
Сообщ.
#7
,
|
|
|
Цитата macomics @ Как говорится лучше поздно чем никогда ![]() |