以前unlhacom.dllという名前だったのですが、「同じ名前のものがある」ということがわかり
名前を変え、さらに各種アーカイブDLLに対応しています。
このドキュメントは以前のUNLHACOMのものを元にしているので、記述に間違いがあるかも...
メールか掲示板でお知らせください。
各種アーカイブDLL(ex.UNLHA32.DLLなど)を呼び出すActiveX
DLLです。
基本的にそれほどたいしたことしているわけではありません。(^_^;)
ただただDLLの宣言をいちいちするのが面倒なのと、ActivePerlやASPからLHAを扱いたかっただけなのです。
(と思っていたら、ActivePerlでもDLLが直接呼べるのでした...。なんてこったい)
各種アーカイバDLLの詳細については
統合アーカイバ・プロジェクト
をご参照ください。
1999/1/27 : KBAとして出直し、Ver.0.01 (ベータ)
ここまではUNLHACOM.DLLという名前でした
1998/12/ 7 : Ver.1.50 ベータ
クラスの一本化
ASPからも変数で呼び出せるように変更
LhaVer→Verに名称を変更
メソッドの追加
1998/12/ 1 : Ver.1.00 改訂版
ArcOriginalSizeの名前を修正、ArcAPIでのエラー処理の追加
1998/11/30 : Ver.1.00
VBで作ったActiveX DLLです。VB6のランタイムが必要です。
(1)ファイルをPATHがとおっている場所(ex. c:\windows\systemとか)にコピーします。
(2)「ファイル名を指定して実行」から「regsvr32」で登録します。
regsvr32 c:\windows\system\kba.dll
(1)あとはファイル名を指定して実行から「regsvr32」を削除します。
regsvr32 /u c:\windows\system\kba.dll
Excel VBAによって呼び出す場合のプログラム例です。
Option Explicit
'簡単なプログラム
Sub LhaTest()
'変数宣言
Dim oLha As KBA.UNLHA 'UnLha系APIのオブジェクト
Dim sRes As String 'LHAの結果を取得するための領域
'オブジェクトの作成
Set oLha = CreateObject("KBA.UNLHA")
'UNLHA32.DLLのバージョンを表示
MsgBox "Ver.:" & oLha.Ver
'圧縮の実行
oLha.ArcCmd "a -rx c:\test c:\autoexec.bat c:\config.sys", sRes
MsgBox sRes '実行結果の表示
'ファイルがLHA形式かをチェック
MsgBox oLha.CheckArchive("c:\test.lzh")
'格納ファイルの数を取得
MsgBox oLha.FileCount("c:\test.lzh")
'LHAファイルの指定
oLha.OpenArc "c:\t12.lzh"
nRow = 1
nRes = oLha.FindFirst("*") 'ファイルの検索
Do While nRes = 0
nRow = nRow + 1
'格納ファイルの情報
With ActiveSheet
.Cells(nRow, 1) = oLha.FileName '格納ファイル名
.Cells(nRow, 2) = oLha.FileTime '日時
.Cells(nRow, 3) = oLha.FileAttr '属性
.Cells(nRow, 4) = oLha.FileMode 'モード(メソッド)
.Cells(nRow, 5) = oLha.OriginalSize 'サイズ
.Cells(nRow, 6) = oLha.CompressedSize '圧縮後サイズ
.Cells(nRow, 7) = oLha.Ratio '圧縮率
End With
nRes = oLha.FindNext '次の格納ファイルを検索
Loop
'書庫ファイル全体の情報
nRow = 1
With ActiveSheet
.Cells(nRow, 1) = oLha.ArcName '書庫ファイル名
.Cells(nRow, 2) = oLha.ArcDateTime '日時
.Cells(nRow, 5) = oLha.ArcOrginalSize '元の大きさ
.Cells(nRow, 6) = oLha.ArcCompressedSize '圧縮後サイズ
.Cells(nRow, 7) = oLha.ArcRatio '圧縮率
End With
oLha.CloseArc
End Sub
ASPによって呼び出す場合のプログラム例です。
<HEAD>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=x-sjis">
<TITLE>LHA Sample</TITLE>
</HEAD>
<BODY>
<H1>LHAファイルの内容</H1>
<script Language="VBScript" RUNAT="Server">
Sub RunLHA ()
Dim oLha
Dim nRow
Dim sFile
Dim sCmd
Dim nArc
Dim oFile
'オブジェクトの作成
Set oLha = CreateObject("KBA.UNLHA")
sArc = "c:\test1.lzh"
'書庫ファイルを削除しておく
Set oFile = CreateObject("Scripting.FileSystemObject")
If oFile.FileExists(sArc) then
oFile.DeleteFile(sArc)
End If
Set oFile = Nothing
'バージョンの表示
Response.Write "Version:" & oLha.Ver & "<BR>" 'バージョン
'基本的なメソッド
Response.Write "コマンドによる書庫ファイルへの追加"
sCmd = "a " & sArc & " *.bat"
oLha.ArcCmd(sCmd)
Response.Write "<PRE>" & oLha.ArcRes & "</PRE>"
'OpenArc系の処理
If (Not oLha.OpenArc(sArc)) then
Response.Write("OPEN NG")
Exit Sub
End If
nRes = oLha.FindFirst("*") 'ファイルの検索
Response.Write("<TABLE BORDER><TR>" & _
"<TH>ファイル名</TH>" & _
"<TH>日時</TH>" & _
"<TH>属性</TH>" & _
"<TH>モード</TH>" & _
"<TH>サイズ</TH>" & _
"<TH>圧縮サイズ</TH>" & _
"<TH>圧縮率</TH>" & _
"</TR>")
Do While nRes = 0
nRow = nRow + 1 '格納ファイルの情報
Response.Write("<TR>")
Response.Write("<TD>" & oLha.FileName & "</TD>" ) '格納ファイル名
Response.Write("<TD>" & oLha.FileTime & "</TD>" ) '日時
Response.Write("<TD>" & oLha.FileAttr & "</TD>" ) '属性
Response.Write("<TD>" & oLha.FileMode & "</TD>" ) 'モード
Response.Write("<TD>" & oLha.OriginalSize & "</TD>" ) 'サイズ
Response.Write("<TD>" & oLha.CompressedSize & "</TD>" ) '圧縮サイズ
Response.Write("<TD>" & oLha.Ratio & "%</TD>" ) '圧縮率
Response.Write("</TR>")
nRes = oLha.FindNext '次の格納ファイルを検索
Loop
'書庫ファイル全体の情報
Response.Write("<TR>")
Response.Write("<TD>" & oLha.ArcName & "</TD>" ) '書庫ファイル名
Response.Write("<TD>" & oLha.ArcDateTime & "</TD>" ) '日時
Response.Write("<TD> </TD>" ) 'ダミー
Response.Write("<TD> </TD>" ) 'ダミー
Response.Write("<TD>" & oLha.ArcOriginalSize & "</TD>" ) 'サイズ
Response.Write("<TD>" & oLha.ArcCompressedSize & "</TD>" ) '圧縮サイズ
Response.Write("<TD>" & oLha.ArcRatio & "%</TD>" ) '圧縮率
Response.Write("</TR>")
oLha.CloseArc
Set oLha = Nothing
End Sub
'LHAの実行
RunLHA
</script>
</BODY>
</HTML>
ご意見、ご質問はこちらの掲示板で受け付けています。 またメールは河馬屋(Nifty)にお願いします。