VB2005でUNLHA32.DLLを使用するには?

解決


まりも  2007-05-26 03:19:54  No: 143554

VB2005からUNLHAを使用してファイルの圧縮を行いたいと思ってます。

UNLHA32.DLLのインストールを済ませて、以下のようなコードで実行しようと
したところ、「PInvokeStackImbalanceが検出されました。」のアラートが
表示されて処理が中断してしまいます。

いったい何が原因でどのように対処すれば良いのかご指導いただけないでしょ
うか?

    Declare Function Unlha Lib "UNLHA32.DLL" (ByVal hWnd As Long, _
                                ByVal szCmdLine As String, _
                                ByVal Lpstr As String, _
                                ByVal wsize As Long) As Integer

    Private Sub lhaTest()
        Dim rcd As Integer

        rcd = Unlha(0&, "a c:\ttt c:\test\*.*", vbNullString, 0)
    End Sub

最終的な成果物としてファイルが圧縮できれば良いので、もっと初心者向けの
ファイル圧縮の方法がありましたら教えていただきたいと思います。

よろしくお願いします。


大吉末吉  2007-05-26 04:09:51  No: 143555

> 「PInvokeStackImbalanceが検出されました。」
> 何が原因でどのように対処すれば良いのか

原因は、DLL宣言の「引数の個数やデータ型が間違っている」所為です。

具体的には「Long型」が間違いです。

上記のプログラムは、どこからもって来ました?
その出所は、VB6とかを対象としたものではありませんか?

VB2005では、旧VB(VB6)とかと、データ型が変更になっています。

例えば
VB2005のInteger型は、VB6のLong型と同じです。
VB6用のプログラムで「Long型」が指定されている箇所は、VB2005では「Integer型」に変更しなければなりません。

> もっと初心者向けの
> ファイル圧縮の方法がありましたら教えていただきたいと思います。

VB2005なら、
「圧縮のアプリケーション サンプル  」
http://msdn2.microsoft.com/ja-jp/library/ywf6dxhx(VS.80).aspx
とか・・・


まりも  2007-05-28 17:57:59  No: 143556

大吉末吉様

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

Declare Function 宣言のLong型をInteger型に修正することで、
正常に圧縮処理を行えました。

また、お教えいただきました「圧縮のアプリケーションサンプル」も
参考にして、どちらか使い勝手の良い方でコーディングを進めて行き
たいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加