解压7ZIP文件和动态加载DLL例题(FF源码)

  勇芳 2017-11-23 7852


在源码中,你可以学到,FreeBasic 是如何动态加载 DLL 及动态声明 DLL 函数的方法

本例题用 7ZIP.DLL 做例题,也可以学到 用它解压文件的方法

当然也可以压缩,那你自己研究,我没研究。


本例题是 FireFly 工程源码,也可以用文本查看源码。


完整源码,请进QQ群下载。

Type tagINDIVIDUALINFO
    dwOriginalSize as Long    ' 文件大小
    dwCompressedSize as Long ' 压缩后的大小
    dwCRC as Long                   '文件时为 0  文件非0     CRC32位数字
    uFlag as Long                     '
    uOSType as Long                     '
    wRatio as UShort                     '
    wDate as UShort                     '文件日期
    wTime as UShort                     '文件时间
    szFilename as   ZString  *513     '文件名
    dummy1 as ZString *3
    szAttribute as ZString *8
    szMode as  ZString *8                     '压缩算法
End Type
Type tagEXTRACTINGINFO
    dwFileSize as Long  '文件大小
    dwWriteSize as Long '写入大小
    szSourceFileName  as ZString *513 '原文件名
    dummy1 as ZString *3 '样本  实测为空
    szDestFileName as ZString *513 '目的文件名
    dummy as ZString *3 '样本实测为空
End Type
Type tagEXTRACTINGINFOEX
    exinfo as tagEXTRACTINGINFO
    dwCompressedSize as Long '压缩文件的长度;压缩尺寸;压缩规模
    dwCRC as Long 'CRC校验码
    uOSType as Long '操作系统型
    wRatio as Long '比例
    wDate as Long '日期
    wTime as Long '时间
    szAttribute as  ZString *8 '属性
    szMode  as ZString *8 '压缩算法
End Type

Dim Shared SevenZipGetBackGroundMode as Function () as Long
Dim Shared SevenZipSetBackGroundMode as Function (ByVal bBackGroundMode as Long) as Long
Dim Shared SevenZip                  as Function (ByVal sHWnd as HWnd,ByVal  szCmdLine as LPCSTR,ByVal  szOutPut as LPCSTR, ByVal dwSize as Long) as Long
Dim Shared SevenZipGetFileCount      as Function (ByVal szArcFile as LPCSTR) as Long
Dim Shared SevenZipOpenArchive       as Function (ByVal sHWnd as HWnd,ByVal szFilename as LPCSTR, ByVal dwSize as Long) as Long
Dim Shared SevenZipCloseArchive      as Function (ByVal hArc as Long) as Long
Dim Shared SevenZipFindFirst         as Function (ByVal hArc as Long, ByVal szWildName as LPCSTR,ByVal  lpSubInfo as tagINDIVIDUALINFO Ptr) as Long
Dim Shared SevenZipFindNext          as Function (ByVal hArc as Long,ByVal lpSubInfo as tagINDIVIDUALINFO Ptr) as Long
Dim Shared SevenZipSetOwnerWindowEx  as Function (ByVal sHWnd as HWnd, ByVal lpArcProc as Long) as Long
Dim Shared SevenZipCheckArchive      as Function (ByVal szFilename as  LPCSTR , ByVal imode as Long) as Long
Dim Shared SevenZipSetCursorMode     as Function (ByVal CursorMode as Long) as Long
Dim Shared  Lib7zip as  Any Ptr  '动态加载的7ZIP地址
'--------------------------------------------------------------------------------

Function Pb7zipFileList(ByVal hFile as String,sFile() as String ) as Long '获取7zip文件列表,返回文件个数,=0 表示失败
  Dim as Long  a,C,U,Uc,I, ArcHandle
  Dim as String  d,M
  Dim  u7z as tagINDIVIDUALINFO
  If Chek7zipFile(hfile)=0 Then
      Function=0
      Exit Function  
  End If
  
  ArcHandle = SevenZipOpenArchive(0, StrPtr(hFile), 0)
  Print ArcHandle
  If ArcHandle = 0 Then
      MessageBox( HWND_FORM1,hFile & Chr(13,10,13,10) &  "无法打开文件!文件被保护或者不是7ZIP文件。" ,app.ProductName , _
      MB_OK Or MB_ICONERROR Or MB_DEFBUTTON1 Or MB_APPLMODAL )
      ReDim sFile(0)
      Function = 0
      Exit Function
  End If
  
  a = SevenZipFindFirst(ArcHandle, "*", @u7z)
  U = 0
  Uc = 0
  Do
      If a <> 0 Then Exit Do
      U = U + 1
      d = u7z.szFilename
      
      。。。。。。。。。。


因国家互联网安全管理要求,关闭回帖功能。大家需要留言,请使用【勇芳软件客服】即时联系勇芳点此打开->>勇芳软件客服
返回
联系勇芳
发新帖 搜索 反馈 回顶部