在源碼中,你可以學到,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
。。。。。。。。。。