プロが教えるわが家の防犯対策術!

VB2005または2008でUnzip32を使ってzipファイルを解凍する方法を教えてください。
Unzip32のバージョンは5.42、OSはXP32bitSP3です。
UnZipGetVersionではきちんとバージョンが返ってきますので、DLL自体には問題はないと思います。

Classの下に
Public Declare Function UnZip Lib "unzip32.dll" (ByVal hwnd As Long, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Long) As Long

を記述し、
UnZip(0, "-o C:\01.zip E:\", vbNull, 0)
と命令してもコンパイラエラーになってしまいます。
第二引数のC:\01.zipはちゃんと存在するファイルであることを一応書き添えておきます。

引数の記述がおかしいと思うのですが、Unzip32のドキュメントを読んでも解決できません。
一日中ぐぐってもVB2005以降での構文サンプルも見つかりませんでした。
UnzioExtractでも引数の説明が意味不明で解凍できませんでした。

できましたら第一から第四までの引数になにを入れたらいいのか、
具体的に指示していけたらありがたいです。

よろしくお願いします。

A 回答 (2件)

まず、前回の訂正です。



>"E:\" のところは、出力先ではなく、ZIP 内のファイルを指定するんじゃないかと思います。

は私の勘違いでした。


で、エラーの内容ですが、

http://www.red.oit-net.jp/tatsuya/vb/Unzip32.htm

によると(おそらく、このページを参考にされてたんですよね。)

Private Const ERROR_NOT_FIND_ARC_FILE = &H8029&

とのことなので、C:\01.zip が壊れているのではないかと思います。
一度、他の解凍ソフトで解凍できるか試してみてはどうでしょうか。


ところで、

Public Declare Function UnZip Lib "unzip32.dll" _
(ByVal hwnd As Long, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Long) As Integer

で本当にエラーが返ってきますか?
前回書いたように

Public Declare Function UnZip Lib "unzip32.dll" (ByVal hwnd As Integer, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Integer) As Integer

と宣言しないと ( hwnd As Integer、dwSize As Integer です。) 例外が発生するのではないかと思うのですが・・・。
    • good
    • 0
この回答へのお礼

Googleクロームかr投稿したら全部消えてしまったので書き直します(泣

回答ありがとうございました
ご指摘いただいたデータ型はLongのままでもDLLからエラーが返ってきていました。が、Integerに修正して試行したところイッパツで回答できました。

ご指導いただきありがとうございました。

お礼日時:2011/02/23 09:59

Public Declare Function UnZip Lib "unzip32.dll" (ByVal hwnd As Long, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Long) As Long



は VB6 用の宣言だと思います。.NET ( Win32 ) では

Public Declare Function UnZip Lib "unzip32.dll" (ByVal hwnd As Integer, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Integer) As Integer

とします。( Private でも OK かも。)

"E:\" のところは、出力先ではなく、ZIP 内のファイルを指定するんじゃないかと思います。
vbNull ではなく、vbNullString にしないとだめだと思います。


UnZip(0, "-o C:\01.zip E:\", vbNull, 0)



UnZip(0, "-o C:\01.zip *.*", vbNullString, 0)
    • good
    • 0
この回答へのお礼

回答ありがとうございます
下記の記述で試してみましたがError/Warning :0x8029と返ってきます
ファイルは存在していますし、エクセルからUnzip32.DLLで解凍することはできるのですが・・・・

Public Declare Function UnZip Lib "unzip32.dll" _
(ByVal hwnd As Long, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Long) As Integer

Private Sub Button1_Click _
(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim result As Long '戻り値 (成功:0 失敗:エラーコード)

result = UnZip(0, "C:\01.zip C:\", vbNullString, 0)

If (result <> 0) Then MsgBox("Error/Warning : 0x" & Hex(result))
End Sub


引き続きよろしくお願い致します

お礼日時:2011/02/22 09:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!