小弟最近在用VB调用7zip32.dll做一个解压7z文件的工具
以下为模块代码:
Public Type tagEXTRACTINGINFO
dwFileSize As Long
dwWriteSize As Long
szSourceFileName As String * 513
dummy1 As String * 3
szDestFileName As String * 513
dummy As String * 3
End Type
Public Type tagEXTRACTINGINFOEX
exinfo As tagEXTRACTINGINFO
dwCompressedSize As Long
dwCRC As Long
uOSType As Long
wRatio As Long
wDate As Long
wTime As Long
szAttribute As String * 8
szMode As String * 8
End TypePublic Declare Function SevenZipSetOwnerWindowEx Lib "Files\7-zip32.dll" (ByVal hWnd As Long, ByVal lpArcProc As Long) As LongPublic Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As LongPublic ExtractFiles() As String
Public strTemp As StringPublic Function ArchiveProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal nState As Long, lpEis As tagEXTRACTINGINFOEX) As Boolean
'这个是回调函数。nstate=0时压缩或解压进行中。nstate=2时压缩或解压完毕。可回显lpEis下的参数。
If nState = 0 Then
问题:当在这里加如加入一些处理语句时,就解压不出任何东西,也没跳出任何错误信息!
Dim i As Long
If SafeArrayGetDim(ExtractFiles) = 0 Then
i = 0
Else
i = UBound(ExtractFiles) + 1
End If
ReDim Preserve ExtractFiles(i)
ExtractFiles(i) = lpEis.exinfo.szSourceFileName
如果把以上所有语句去掉,直接取得lpEis下的参数,(如:strTemp = lpEis.exinfo.szSourceFileName
,或者:Form1.Text1.Text= = lpEis.exinfo.szSourceFileName,则解压就顺利完成。
End If
ArchiveProc = True
End FunctionSevenZipSetOwnerWindowEx Me.hWnd, AddressOf ArchiveProc‘回调
请问大神为何会出现次情况?是Dll文件本身的Bug吗?
以下为模块代码:
Public Type tagEXTRACTINGINFO
dwFileSize As Long
dwWriteSize As Long
szSourceFileName As String * 513
dummy1 As String * 3
szDestFileName As String * 513
dummy As String * 3
End Type
Public Type tagEXTRACTINGINFOEX
exinfo As tagEXTRACTINGINFO
dwCompressedSize As Long
dwCRC As Long
uOSType As Long
wRatio As Long
wDate As Long
wTime As Long
szAttribute As String * 8
szMode As String * 8
End TypePublic Declare Function SevenZipSetOwnerWindowEx Lib "Files\7-zip32.dll" (ByVal hWnd As Long, ByVal lpArcProc As Long) As LongPublic Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As LongPublic ExtractFiles() As String
Public strTemp As StringPublic Function ArchiveProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal nState As Long, lpEis As tagEXTRACTINGINFOEX) As Boolean
'这个是回调函数。nstate=0时压缩或解压进行中。nstate=2时压缩或解压完毕。可回显lpEis下的参数。
If nState = 0 Then
问题:当在这里加如加入一些处理语句时,就解压不出任何东西,也没跳出任何错误信息!
Dim i As Long
If SafeArrayGetDim(ExtractFiles) = 0 Then
i = 0
Else
i = UBound(ExtractFiles) + 1
End If
ReDim Preserve ExtractFiles(i)
ExtractFiles(i) = lpEis.exinfo.szSourceFileName
如果把以上所有语句去掉,直接取得lpEis下的参数,(如:strTemp = lpEis.exinfo.szSourceFileName
,或者:Form1.Text1.Text= = lpEis.exinfo.szSourceFileName,则解压就顺利完成。
End If
ArchiveProc = True
End FunctionSevenZipSetOwnerWindowEx Me.hWnd, AddressOf ArchiveProc‘回调
请问大神为何会出现次情况?是Dll文件本身的Bug吗?
解决方案 »
- vba 如何把一个用base64.encode的文件字符串输到文件中?
- c++到vb的函数声明问题 谢谢
- 水晶報表與vb編程
- 关于ActiveX的问题。
- “超级绿豆”And“冰儿马甲”请进,也欢迎其他高人参与。(跨进程Hook)
- 0.5需要显示个位的0 ;高手快来!
- 站点的东西还能下载吗?我怎么下不下来了
- VB6 如何使用ADO技术 逐行读取ACCESS数据??
- 我用dtpicker绑定到adodc上,但是一修改dtpicker,就会提示出错
- 用RECORDSET中的FILTER属性 ,将其赋予一临时记录集,绑定到DATACOMBO控件时,为何运行时显示原记录集全部记录
- 关于vb+sql2000中update的“超时已经过期”问题
- dtpicker控件……急。
Public ExtractFiles() As String
Public FileCapacity As Long
Public FileCount As LongPublic Function ArchiveProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal nState As Long, lpEis As tagEXTRACTINGINFOEX) As Boolean
Dim sFileName As String
If nState = 0 Then
'第一时间取得数据'
sFileName = lpEis.exinfo.szSourceFileName
'空间成块增长'
If FileCount <= FileCapacity Then
FileCapacity = FileCapacity + 1024
ReDim Preserve ExtractFiles(FileCapacity - 1)
End If
'添加数据'
ExtractFiles(FileCount) = sFileName
FileCount = FileCount + 1
End If
ArchiveProc = True
End Function