- PR -

tar32.dllについて

投稿者投稿内容
1co
常連さん
会議室デビュー日: 2005/08/10
投稿数: 39
投稿日時: 2006-12-12 21:34
お世話になります。

VB.net(WinXP/VS2003/.net Framework1.1)にて
.tarファイルを解凍するプログラムを作成しています。
過去の投稿を検索して、tar32.dllを使用するところまで調べましたが、
以下のコードを実行すると、戻り値32792が返され、処理が正常に終了しません。
なにが問題なのか、教えていただけますと幸いです。

また、.tarファイルの解凍について、解凍先を指定する際、

tar xvf .tarファイル名 -c 解凍先Dir

と指定するように記憶しておりますが、
このように引数_szCmdLineに指定すると
指定したディレクトリに解凍ファイルが作成されますでしょうか?

どなたかご存知の方がいらっしゃいましたら
何卒ご教授よろしくお願いいたします。

コード:
Public Class frmMain
    Inherits System.Windows.Forms.Form

    <DllImport("tar32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
    Shared Function Tar(ByVal _hwnd As IntPtr, _
                        ByVal _szCmdLine As String, _
                        ByVal _szOutput As String, _
                        ByVal _dwSize As Integer) As Integer
    End Function

    Private Sub btn1_Click(ByVal sender As System.Object, _
                                ByVal e As System.EventArgs) Handles btn1.Click

        Dim command As String = "-x C:/test/xxx.tar"
        Dim ret As Integer

        ret = Me.Tar(Me.Handle, command, Nothing, 0)

    End Sub

End Class

Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-12-12 22:38
コードを見た感じ、特に間違いってのはなさそうですね。
// Tar 関数は SetLastError しなかったような気がするけど。

返値の意味は unlha32.dll 付属の API.TXT をご参照いただくとして。
LPSTR、つまり呼び出し先で変更される文字列については、System.Text.StringBuilder クラスを利用します。この辺の情報も MSDN に載っていますので、相互運用マーシャリングとかなんとかそんな感じの記事を探して読んでおいて下さい。
で、これを使って処理結果を文字列で受け取ってみたらどうでしょうか。


引用:

1coさんの書き込み (2006-12-12 21:34) より:
また、.tarファイルの解凍について、解凍先を指定する際、

tar xvf .tarファイル名 -c 解凍先Dir

と指定するように記憶しておりますが、
このように引数_szCmdLineに指定すると
指定したディレクトリに解凍ファイルが作成されますでしょうか?


こっちについては、Tar32.dll 付属の Tar_cmd.txt に記述されているのでご参照下さい。cmd_tare.txt の方なら英語ながらコマンド例も挙げられています。
鶴屋さん
会議室デビュー日: 2006/08/11
投稿数: 7
投稿日時: 2006-12-13 00:21
http://www.kmonos.net/lib/
「UnDller」でまずは引数が正しいかを確認すると幸せになれるかも

ただ、
コマンドが正しいかどうかの確認はしていないので、
コマンド引数が悪いのか別の部分が悪いのかの判断には便利だと思って脊髄反射でレスつけてみました
1co
常連さん
会議室デビュー日: 2005/08/10
投稿数: 39
投稿日時: 2006-12-13 12:05
Hongliangさん、鶴屋さん

ご回答ありがとうございます。
返信が大変遅れまして申し訳ありません。

まず、鶴屋さんからご紹介いただいた「UnDller」にて引数が正しいかどうか確認してみました。
DLL:tar32.dll
API:tar
Command:-x c:/test/xxx.tar
および
Command:-xvf C:/test/xxx.tar -c c:/test/extract
結果どちらも「返値はOK」とメッセージボックスが表示されましたので、
引数については問題ないと思われます。

次に、Hongliangさんからご指摘いただいたとおり、
ソースを以下のとおり変更し実行してみました。

コード:
Public Class frmMain
    Inherits System.Windows.Forms.Form

    <DllImport("tar32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _
    Shared Function Tar(ByVal _hwnd As IntPtr, _
                        ByVal _szCmdLine As System.Text.StringBuilder, _
                        ByVal _szOutput As String, _
                        ByVal _dwSize As Integer) As Integer
    End Function

    Private Sub btn1_Click(ByVal sender As System.Object, _
                                ByVal e As System.EventArgs) Handles btn1.Click

        Dim cmd As New System.Text.StringBuilder("-xvf C:/test/xxx.tar -c c:/test/extract")
        Dim ret As Integer

        ret = Me.Tar(Me.Handle, cmd, Nothing, 0)

    End Sub

End Class



結果、戻り値は0でしたので、処理は正常に終了しました。

しかし、UnDllerでも、上記コードを実行した際も、
指定したディレクトリにファイルが展開されません。
(xxx.tarには.txtファイルが7件入っています。)
これはなぜなのでしょうか?

度々申し訳ありませんが、ご教授いただけますと幸いです。
自分でも現在Hongliangさんから教えていただいた情報を確認中ですが、
なにかわかることがありましたらよろしくお願いいたします。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-12-13 12:42
一般的に、tar の -c は「アーカイブを作る」という意味です。
tar32.dll に cmd_tar.txt というドキュメントが付いてるはずですが、そちらに目を通されましたか?
1co
常連さん
会議室デビュー日: 2005/08/10
投稿数: 39
投稿日時: 2006-12-13 13:32
スフレさん

ご回答ありがとうございます。

Tar_cmd.txtには目を通しましたが、
「展開先の指定」といったようなオプションはありませんでした。

また、展開先を指定しなかった場合、
デフォルトはどこに展開されるものなのでしょうか?
たとえば、commandに"-x c:/test/xxx.tar"と指定した場合
c:/testディレクトリに展開されるのでしょうか?

知識不足で申し訳ありません。。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-12-13 14:02
スフレさんが仰っているのは「Tar_cmd.txt」ではなく「cmd_tare.txt」のことだと思
います。

Tar_cmd.txt には

引用:

 この文書ではTAR32.DLL Ver2.xxのTar() APIで用いるコマンドの簡単な説明を行います。
 基本的には、TAR32.DLL Ver0.xxと同じです。


とありますし、細かいところまでは書いていませんよね。
1coさんの知りたいことは Tar_cmd.txt ではわからないと思われるので、
cmd_tare.txt を見るようにという話になったのでしょう。

そして cmd_tare.txt では

引用:

o PATH | PATH\ (extract to) 。

tar xvaf GCC242.TGZ -o c:\gnu
or
tar xvaf GCC242.TGZ c:\gnu\


とありますから、-o オプションで解凍するパスを指定できると思われます。
(というかこちらでやってみたところ、指定したパスに解凍されました)

引用:

1coさんの書き込み (2006-12-13 13:32) より:

また、展開先を指定しなかった場合、
デフォルトはどこに展開されるものなのでしょうか?
たとえば、commandに"-x c:/test/xxx.tar"と指定した場合
c:/testディレクトリに展開されるのでしょうか?


これは聞く前に実際に試してみることはできますよね(たぶんカレントディレクトリだと思い
ます)。

引用:

知識不足で申し訳ありません。。


知識不足は誰にでもあることですし、専門外のことであればなおさらです。知識不足そ
のものは責められるものではありません(とは言え、世の中には知っていて当然といった事
柄もあるわけですが)。いま知識不足でも、調べれば知識は身につくはずですし。
むしろ「聞く前に自分で行動できるのに何もしない」ことは責められるべきかと思います。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
1co
常連さん
会議室デビュー日: 2005/08/10
投稿数: 39
投稿日時: 2006-12-13 14:10
ぽぴ王子さん

ご回答ありがとうございます。

引用:

スフレさんが仰っているのは「Tar_cmd.txt」ではなく「cmd_tare.txt」のことだと思
います。



てっきり同じファイルだと思っておりました。
すぐに確認いたします。

引用:

引用:
--------------------------------------------------------------------------------


1coさんの書き込み (2006-12-13 13:32) より:

また、展開先を指定しなかった場合、
デフォルトはどこに展開されるものなのでしょうか?
たとえば、commandに"-x c:/test/xxx.tar"と指定した場合
c:/testディレクトリに展開されるのでしょうか?

--------------------------------------------------------------------------------


これは聞く前に実際に試してみることはできますよね(たぶんカレントディレクトリだと思い
ます)。



言葉足らずで申し訳ありません。
質問する前に試してはみました。
実行の結果、カレントディレクトリにはなにも展開されなかったため、
質問させていただきました。

スキルアップ/キャリアアップ(JOB@IT)