Hi :) I'm trying to work with UNRAR.DLL but i have problem
to passing structur to a dll function, anybody can help me ?
because i become crazy with bmax incomplete doc ....
Here is the UNRAR SDK :
http://www.blitz3dfr.com/tempo/UnRARDLL.rar
Here is my test :
The UNRAR.H say that :
to passing structur to a dll function, anybody can help me ?
because i become crazy with bmax incomplete doc ....
Here is the UNRAR SDK :
http://www.blitz3dfr.com/tempo/UnRARDLL.rar
Here is my test :
Incbin "unrar.dll" Const DllName:String = "unrar.dll" Local DllHandle = LoadLibraryA(DllName) If DLLhandle = 0 Then Notify "Unable to initialize unrar.dll" End EndIf Const ERAR_END_ARCHIVE = 10 Const ERAR_NO_MEMORY = 11 Const ERAR_BAD_DATA = 12 Const ERAR_BAD_ARCHIVE = 13 Const ERAR_UNKNOWN_FORMAT = 14 Const ERAR_EOPEN = 15 Const ERAR_ECREATE = 16 Const ERAR_ECLOSE = 17 Const ERAR_EREAD = 18 Const ERAR_EWRITE = 19 Const ERAR_SMALL_BUF = 20 Const RAR_OM_LIST = 0 Const RAR_OM_EXTRACT = 1 Const RAR_SKIP = 0 Const RAR_TEST = 1 Const RAR_EXTRACT = 2 Const RAR_VOL_ASK = 0 Const RAR_VOL_NOTIFY = 1 Global RARGetDllVersion()"Win32" = GetProcAddress(DllHandle,"RARGetDllVersion") Global RAROpenArchive(Structur:Int Ptr)"Win32" = GetProcAddress(DllHandle,"RAROpenArchiveData") Type RARHeaderData Field RAR_ArcName:String Field RAR_FileName:String Field RAR_flags:Long Field RAR_PackSize:Long Field RAR_UnpSize:Long Field RAR_HostOS:Long Field RAR_FileCRC:Long Field RAR_FileTime:Long Field RAR_UnpVer:Long Field RAR_Method:Long Field RAR_FileAttr:Long Field RAR_CmtBuf:String Field RAR_CmtBufSize:Long Field RAR_CmtSize:Long Field RAR_CmtState:Long End Type Type RAROpenArchiveData Field RAR_ArcName:String Field RAR_OpenMode:Long Field RAR_OpenResult:Long Field RAR_CmtBuf[0] Field RAR_CmtBufSize:Long Field RAR_CmtSize:Long Field RAR_CmtState:Long End Type Global A:RAROpenArchiveData=New RAROpenArchiveData A.RAR_ArcName="unrar.rar" A.RAR_OpenMode=RAR_OM_LIST A.RAR_CmtBufSize=16384 Print "Version : "+RARGetDllVersion() RAROpenArchive(Int Ptr(Byte Ptr(A)))
The UNRAR.H say that :
#ifndef _UNRAR_DLL_ #define _UNRAR_DLL_ #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 RAR_OM_LIST 0 #define RAR_OM_EXTRACT 1 #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 struct RARHeaderData { char ArcName[260]; char FileName[260]; unsigned int Flags; unsigned int PackSize; unsigned int UnpSize; unsigned int HostOS; unsigned int FileCRC; unsigned int FileTime; unsigned int UnpVer; unsigned int Method; unsigned int FileAttr; char *CmtBuf; unsigned int CmtBufSize; unsigned int CmtSize; unsigned int CmtState; }; struct RARHeaderDataEx { char ArcName[1024]; wchar_t ArcNameW[1024]; char FileName[1024]; wchar_t FileNameW[1024]; unsigned int Flags; unsigned int PackSize; unsigned int PackSizeHigh; unsigned int UnpSize; unsigned int UnpSizeHigh; unsigned int HostOS; unsigned int FileCRC; unsigned int FileTime; unsigned int UnpVer; unsigned int Method; unsigned int FileAttr; char *CmtBuf; unsigned int CmtBufSize; unsigned int CmtSize; unsigned int CmtState; unsigned int Reserved[1024]; }; struct RAROpenArchiveData { char *ArcName; unsigned int OpenMode; unsigned int OpenResult; char *CmtBuf; unsigned int CmtBufSize; unsigned int CmtSize; unsigned int CmtState; }; struct RAROpenArchiveDataEx { char *ArcName; wchar_t *ArcNameW; unsigned int OpenMode; unsigned int OpenResult; char *CmtBuf; unsigned int CmtBufSize; unsigned int CmtSize; unsigned int CmtState; unsigned int Flags; unsigned int Reserved[32]; }; enum UNRARCALLBACK_MESSAGES { UCM_CHANGEVOLUME,UCM_PROCESSDATA,UCM_NEEDPASSWORD }; typedef int (CALLBACK *UNRARCALLBACK)(UINT msg,LONG UserData,LONG P1,LONG P2); typedef int (PASCAL *CHANGEVOLPROC)(char *ArcName,int Mode); typedef int (PASCAL *PROCESSDATAPROC)(unsigned char *Addr,int Size); #ifdef __cplusplus extern "C" { #endif HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData); HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData); int PASCAL RARCloseArchive(HANDLE hArcData); int PASCAL RARReadHeader(HANDLE hArcData,struct RARHeaderData *HeaderData); int PASCAL RARReadHeaderEx(HANDLE hArcData,struct RARHeaderDataEx *HeaderData); int PASCAL RARProcessFile(HANDLE hArcData,int Operation,char *DestPath,char *DestName); int PASCAL RARProcessFileW(HANDLE hArcData,int Operation,wchar_t *DestPath,wchar_t *DestName); void PASCAL RARSetCallback(HANDLE hArcData,UNRARCALLBACK Callback,LONG UserData); void PASCAL RARSetChangeVolProc(HANDLE hArcData,CHANGEVOLPROC ChangeVolProc); void PASCAL RARSetProcessDataProc(HANDLE hArcData,PROCESSDATAPROC ProcessDataProc); void PASCAL RARSetPassword(HANDLE hArcData,char *Password); int PASCAL RARGetDllVersion(); #ifdef __cplusplus } #endif #endif