none
VB6でUNLHA32.DLLを起動するとエラーが発生する RRS feed

  • 質問

  • はじめまして。

    VB6でアプリケーションを作成しています。

    プログラムでCSVファイルを生成し、最後に圧縮しますが、その際、UNLHA32.DLLを利用しています。

     

    具体的には、

    (General)-(Declaration)ブロックで

     

    Private Declare Function Unlha Lib "UNLHA32.DLL" (ByVal Callhwnd As Long, ByVal LHACommand As String, ByVal RetBuff As String, ByVal RetBuffSize As Long) As Long

     

    と宣言し、

    Private Function fncCompress()というプロシージャで

      Dim Ret As String * 255
        Dim strSendStr As String
        strSendStr = "a " & CurDir & "\" & fname & ".lzh " & CurDir & "\" & fname & ".csv"
        Unlha frmAplSrch2.hWnd, strSendStr, Ret, 255
    End Function

     

    と記述しています。

    VisualStudioのワークフォルダでは正常に動作します。(ファイルを生成し、UNLHA32により圧縮します。)

    UNLHA32.DLLはVisualStudioのワークフォルダの中にコピーしています。(PC自体にもUNLHA32.DLLはInstallしていますが。)

     

    そこで配布パッケージを作成し、PCにインストールしました。

    配布パッケージでは、DLL類は、プログラムの実行ファイル(EXEファイル)と同じフォルダ内にUNLHA32.DLLをコピーするようにしています。

     

    スタートメニューからプログラムを起動すると、

    実行エラー53 ファイルが見つかりません。

    とエラーが表示されます。

     

    なぜ2者の違いにより正常終了・エラー終了するのかわかりません。

     

    2007年5月21日 10:29

すべての返信

  • 余談ですが、上記手法は、Netにて見つけた方法

    http://tokyo.cool.ne.jp/kanain/APIHTM/UnLHA.html

    を利用させていただいたものです。
    2007年5月21日 10:48
  • furuyosi さん、こんにちは。

     furuyosi さんからの引用
    余談ですが、上記手法は、Netにて見つけた方法

    http://tokyo.cool.ne.jp/kanain/APIHTM/UnLHA.html

    を利用させていただいたものです。

    VB6 以前の型指定なのでダメだと思います。
    .NET では Integer, Long の精度が異なります。
    2007年5月21日 11:49
  • おそらく、

    Code Snippet
    <DllImport("Unlha32.dll")> _
    Private Shared Function Unlha( _
        ByVal handle    As System.IntPtr, _
        ByVal szCmdLine As String, _
        ByVal szOutput  As String, _
        ByVal dwSize    As Integer) As Integer
    End Function

     

    こんな感じではないでしょうか。

    しまった、本題は "実行エラー53 ファイルが見つかりません。" でしたね。
    2 投稿目しか見ておりませんでした。

    うげっ、VB6 ぢゃん... orz
    すみません。すみません。(*_ _)
    2007年5月21日 11:51
  • アプリケーションをインストールしたフォルダはどこでしょう?

    C:\Program Files\TheApp みたいに、パスに空白が含まれる場合、

    うまく動かないような予感がします。

    2007年5月21日 13:19
  • はい、インストールパスがProgram Files配下ですので、パス名に空白を含んでいます。

    この場合の回避策などありませんでしょうか。

    2007年5月21日 23:50
  • 何かしらのパスをパラメータにとるコマンドで、そのパスに空白が含まれる場合、

    (多くの場合)パスを "" で囲むことになっています。

    "F:\Pa th\Test.txt"

    こんなふうに。

    理由は、パスの空白が、コマンドのパラメータの区切りと判断されてしまうからです。

    この場合、次のようにするとどうでしょう。

    strSendStr = "a """ & CurDir & "\" & fname & ".lzh"" """ & CurDir & "\" & fname & ".csv"""

    ファイル名だけ指定するという手もありますが。

    2007年5月22日 1:06
  • ありがとうございました。

    ご指摘の通り変更しましたところ、空白を含むパス名のパスでも正常に動作しました。

    2007年5月22日 1:48