FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Библиотека UnrarDLL

Участников: 2

Перейти вниз

Библиотека UnrarDLL Empty Библиотека UnrarDLL

Сообщение  electrik Сб Янв 17, 2009 1:33 am

все мы знаем не плохой архиватор "rar", с хорошим сжатием и т.д. иногда в приложении надо распаковать архив "rar" и чтоб не юзать консольные утилиты, есть библиотека "UnrarDLL".
скачать это хозяйство можно:
http://rarlab.com/rar_add.htm
я переделал заголовки под FreeBasic, и вот что получилось
код файла "unrar.bi":

#ifndef _UNRAR_DLL_
#define _UNRAR_DLL_

#inclib "unrar"

#define ERAR_END_ARCHIVE 10
#define ERAR_NO_MEMORY 11
#define ERAR_BAD_DATA 12
#define ERAR_BAD_ARCHIVE 13
#define ERAR_UNKNOWN_FORMAT 14
#define ERAR_EOPEN 15
#define ERAR_ECREATE 16
#define ERAR_ECLOSE 17
#define ERAR_EREAD 18
#define ERAR_EWRITE 19
#define ERAR_SMALL_BUF 20
#define ERAR_UNKNOWN 21
#define ERAR_MISSING_PASSWORD 22

#define RAR_OM_LIST 0
#define RAR_OM_EXTRACT 1
#define RAR_OM_LIST_INCSPLIT 2

#define RAR_SKIP 0
#define RAR_TEST 1
#define RAR_EXTRACT 2

#define RAR_VOL_ASK 0
#define RAR_VOL_NOTIFY 1

#define RAR_DLL_VERSION 4

type RARHeaderData
as zstring * 260 ArcName
as zstring * 260 FileName
as uinteger Flags
as uinteger PackSize
as uinteger UnpSize
as uinteger HostOS
as uinteger FileCRC
as uinteger FileTime
as uinteger UnpVer
as uinteger Method
as uinteger FileAttr
as zstring ptr CmtBuf
as uinteger CmtBufSize
as uinteger CmtSize
as uinteger CmtState
end type

type RARHeaderDataEx
as zstring * 1024 ArcName
as wstring * 1024 ArcNameW
as zstring * 1024 FileName
as wstring * 1024 FileNameW
as uinteger Flags
as uinteger PackSize
as uinteger PackSizeHigh
as uinteger UnpSize
as uinteger UnpSizeHigh
as uinteger HostOS
as uinteger FileCRC
as uinteger FileTime
as uinteger UnpVer
as uinteger Method
as uinteger FileAttr
as zstring ptr CmtBuf
as uinteger CmtBufSize
as uinteger CmtSize
as uinteger CmtState
as uinteger Reserved(1024)
end type

type RAROpenArchiveData
as zstring ptr ArcName
as uinteger OpenMode
as uinteger OpenResult
as zstring ptr CmtBuf
as uinteger CmtBufSize
as uinteger CmtSize
as uinteger CmtState
end type

type RAROpenArchiveDataEx
as zstring ptr ArcName
as wstring ptr ArcNameW
as uinteger OpenMode
as uinteger OpenResult
as zstring ptr CmtBuf
as uinteger CmtBufSize
as uinteger CmtSize
as uinteger CmtState
as uinteger Flags
as uinteger Reserved(32)
end type

enum UNRARCALLBACK_MESSAGES
UCM_CHANGEVOLUME,UCM_PROCESSDATA,UCM_NEEDPASSWORD
end enum

type UNRARCALLBACK as function _
(byval msg as uinteger, byval UserData as LPARAM,_
byval P1 as LPARAM, P2 as LPARAM) as integer

type CHANGEVOLPROC as function cdecl _
(byval ArcName as zstring ptr, byval Mode as integer) as integer
type PROCESSDATAPROC as function cdecl _
(byval Addr as zstring ptr, byval Size as integer) as integer

extern "windows-ms"
declare function RAROpenArchive alias "RAROpenArchive"_
(byval ArchiveData as RAROpenArchiveData ptr) as HANDLE
declare function RAROpenArchiveEx alias "RAROpenArchiveEx"_
(byval ArchiveData as RAROpenArchiveDataEx ptr) as HANDLE
declare function RARCloseArchive alias "RARCloseArchive"_
(byval hArcData as HANDLE) as integer
declare function RARReadHeader alias "RARReadHeader"_
(byval hArcData as HANDLE, byval HeaderData as RARHeaderData ptr) as integer
declare function RARReadHeaderEx alias "RARReadHeaderEx"_
(byval hArcData as HANDLE, byval HeaderData as RARHeaderDataEx ptr) as integer
declare function RARProcessFile alias "RARProcessFile"_
(byval hArcData as HANDLE, byval Operation as integer,_
byval DestPath as zstring ptr, byval DestName as zstring ptr) as integer
declare function RARProcessFileW alias "RARProcessFileW"_
(byval hArcData as HANDLE, byval Operation as integer,_
byval DestPath as wstring ptr, byval DestName as wstring ptr) as integer
declare sub RARSetCallback alias "RARSetCallback"_
(byval hArcData as HANDLE, byval Callback as UNRARCALLBACK,_
byval UserData as LPARAM)
declare sub RARSetChangeVolProc alias "RARSetChangeVolProc"_
(byval bhArcData as HANDLE, byval ChangeVolProc as CHANGEVOLPROC)
declare sub RARSetProcessDataProc alias "RARSetProcessDataProc"_
(byval hArcData as HANDLE , byval ProcessDataProc as PROCESSDATAPROC )
declare sub RARSetPassword alias "RARSetPassword"_
(byval hArcData as HANDLE , byval Password as zstring ptr)
declare function RARGetDllVersion alias "RARGetDllVersion"() as integer
end extern
#endif

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

Библиотека UnrarDLL Empty Re: Библиотека UnrarDLL

Сообщение  Eric-S Сб Янв 17, 2009 3:19 am

Ну что сказать, молодца! Просто молодца! А оно работает? Ты проверял? Если да, то код в студию.

Если не лень, то кинь полный архив, мне на мыло. Я на сайте выложу.
Чтобы там и библиотека и заголовочный файл и вообще полный боекомплект был.

А мне хочеться zip. и Чтобы мог запаковывать и распаковывать.
Мучал zlib, но, нормальный zip так и не получился с ним.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Библиотека UnrarDLL Empty Re: Библиотека UnrarDLL

Сообщение  electrik Сб Янв 17, 2009 12:21 pm

вот пока бьюсь. ходел написать свою прогу для распаковки, пока почему-то не работает. придется сишный исходник переводить. хотя там есть исходник на vb, надо взглянуть.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

Библиотека UnrarDLL Empty Re: Библиотека UnrarDLL

Сообщение  Eric-S Сб Янв 17, 2009 12:33 pm

У-у-у! Браток. Бывает. Ну, желаю тебе удачи.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Библиотека UnrarDLL Empty Re: Библиотека UnrarDLL

Сообщение  electrik Сб Янв 17, 2009 1:05 pm

все-таки написал свою прогу. пока она только выводит имена файлов и распаковывает их. все предельно просто. сначала программа спросит имя архива, а потом путь для распаковки. сообщения об ошибках пока не обрабатываются. так что делайте безпарольный архив и не битый.
код файла unrar.bas:
#include "windows.bi"
#include "unrar.bi"
dim as integer PFCode, RHCode
dim hArcData as handle
dim rarname as string
dim extractPath as string
dim extractPathPtr as zstring ptr
dim HeaderData as RARHeaderData
dim OpenArchiveData as RAROpenArchiveDataEx
input "enter archive name: ",rarname
input "Enter path to extract",extractPath
OpenArchiveData.ArcName = strptr(rarname)
OpenArchiveData.OpenMode=RAR_OM_EXTRACT

hArcData=RAROpenArchiveEx(@OpenArchiveData)
HeaderData.CmtBuf=NULL
extractPathPtr = strptr(extractPath)
while (RHCode=RARReadHeader(hArcData,@HeaderData)) <> 0
print headerdata.filename

PFCode=RARProcessFile(hArcData, RAR_EXTRACT,extractPathPtr,NULL)
if PFCode = 0 then
print "ok"

end if
wend
if RHCode = ERAR_BAD_DATA then
print"File header broken"
sleep
RARCloseArchive(hArcData)
end if

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

Библиотека UnrarDLL Empty Re: Библиотека UnrarDLL

Сообщение  Eric-S Сб Янв 17, 2009 1:59 pm

Ага. Электрик мне слил. Выкладываю у себя на сайте. И вообще я там под эту байду завёл разделчик.
http://eric50.narod.ru/freebasic/

Если у кого чего есть хорошего, тоже кидайте!

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Библиотека UnrarDLL Empty Re: Библиотека UnrarDLL

Сообщение  electrik Вс Июл 19, 2015 8:41 pm

Вот, обновленный заголовочный файл и нормальный пример к unrar. работает на x86 и x64 системах.
качаем:
https://dl.dropboxusercontent.com/u/63991073/unrardll.7z

https://yadi.sk/d/vMG6cxdzhxHfY

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения