Библиотека UnrarDLL
Участников: 2
Страница 1 из 1
Библиотека UnrarDLL
все мы знаем не плохой архиватор "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
скачать это хозяйство можно:
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
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Библиотека UnrarDLL
Ну что сказать, молодца! Просто молодца! А оно работает? Ты проверял? Если да, то код в студию.
Если не лень, то кинь полный архив, мне на мыло. Я на сайте выложу.
Чтобы там и библиотека и заголовочный файл и вообще полный боекомплект был.
А мне хочеться zip. и Чтобы мог запаковывать и распаковывать.
Мучал zlib, но, нормальный zip так и не получился с ним.
Если не лень, то кинь полный архив, мне на мыло. Я на сайте выложу.
Чтобы там и библиотека и заголовочный файл и вообще полный боекомплект был.
А мне хочеться zip. и Чтобы мог запаковывать и распаковывать.
Мучал zlib, но, нормальный zip так и не получился с ним.
Re: Библиотека UnrarDLL
вот пока бьюсь. ходел написать свою прогу для распаковки, пока почему-то не работает. придется сишный исходник переводить. хотя там есть исходник на vb, надо взглянуть.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Библиотека UnrarDLL
все-таки написал свою прогу. пока она только выводит имена файлов и распаковывает их. все предельно просто. сначала программа спросит имя архива, а потом путь для распаковки. сообщения об ошибках пока не обрабатываются. так что делайте безпарольный архив и не битый.
код файла 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
код файла 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
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Библиотека UnrarDLL
Ага. Электрик мне слил. Выкладываю у себя на сайте. И вообще я там под эту байду завёл разделчик.
http://eric50.narod.ru/freebasic/
Если у кого чего есть хорошего, тоже кидайте!
http://eric50.narod.ru/freebasic/
Если у кого чего есть хорошего, тоже кидайте!
Re: Библиотека UnrarDLL
Вот, обновленный заголовочный файл и нормальный пример к unrar. работает на x86 и x64 системах.
качаем:
https://dl.dropboxusercontent.com/u/63991073/unrardll.7z
https://yadi.sk/d/vMG6cxdzhxHfY
качаем:
https://dl.dropboxusercontent.com/u/63991073/unrardll.7z
https://yadi.sk/d/vMG6cxdzhxHfY
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|