- - PR -
圧縮ファイルの情報取得
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-05-08 13:54
いつも参考にさせていただいております。
VS.NET2005 ASP.NET(VB) SQL-SEVER2005Express Edition で開発しています。 下記の宣言と処理で圧縮ファイルの情報を取得しようと思っているのですが うまく取得できないようです。 ------------------------------------------------------------ Private Structure INDIVISUALINFO Public dwOriginalSize As Long Public dwCompressedSize As Long Public dwCRC As Long Public uFlag As Long Public uOSType As Long Public wRatio As Integer Public wDate As Integer Public wTime As Integer <VBFixedStringAttribute(513)> Public szFileName As String <VBFixedStringAttribute(3)> Public dummy As String <VBFixedStringAttribute(8)> Public szAttribute As String <VBFixedStringAttribute(8)> Public szMode As String End Structure <System.Runtime.InteropServices.DllImport("UNLHA32.DLL")> _ Private Shared Function UnlhaOpenArchive(ByVal hwnd As Integer, ByVal szFileName As String, ByVal dwMode As Integer) As Integer End Function <System.Runtime.InteropServices.DllImport("UNLHA32.DLL")> _ Private Shared Function UnlhaCloseArchive(ByVal harc As Integer) As Boolean End Function <System.Runtime.InteropServices.DllImport("UNLHA32.DLL")> _ Private Shared Function UnlhaFindFirst(ByVal harc As Integer, ByVal szWildName As String, ByVal lpSubInfo As INDIVISUALINFO) As Integer End Function Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UpLoadButton.Click Dim hwnd As Long Dim hwnd1 As Long Dim hwnd2 As Long Dim udtINDIVISUALINFO As INDIVISUALINFO = New INDIVISUALINFO hwnd = UnlhaOpenArchive(0, archiveFile, 0) hwmd1 = UnlhaFindFirst(hwnd, "*.*", udtINDIVISUALINFO) hwnd2 = UnlhaCloseArchive(hwnd) End Sub ------------------------------------------------------------ ※archiveFileは圧縮ファイルのパスです。 試しに最初の1件の情報のみと思いUnlhaFindFirstで情報取得をしています。 hwmd1は0で返ってくるので正常に終了しているかと思うのですが udtINDIVISUALINFOの値がうまく入っていないようで情報が取得できません。 何か対処方法はありませんでしょうか? よろしくご教授のほどよろしくお願いします。 [ メッセージ編集済み 編集者: なんとか 編集日時 2007-05-08 14:30 ] [ メッセージ編集済み 編集者: なんとか 編集日時 2007-05-08 14:39 ] |
|
投稿日時: 2007-05-08 14:38
<System.Runtime.InteropServices.DllImport("UNLHA32.DLL")> _
Private Shared Function UnlhaFindFirst(ByVal harc As Integer, ByVal szWildName As String, ByVal lpSubInfo As INDIVISUALINFO) As Integer End Function 上記内容で "ByVal lpSubInfo As INDIVISUALINFO"を"ByRef lpSubInfo As INDIVISUALINFO"にしたところ 数値部分は取れるようになったのですが ユーザー定義で定義した <VBFixedStringAttribute(513)> Public szFileName As String <VBFixedStringAttribute(3)> Public dummy As String <VBFixedStringAttribute(8)> Public szAttribute As String <VBFixedStringAttribute(8)> Public szMode As String この部分がNotingになってしまいます。 やはり、この部分の書き方が悪いのでしょうか・・・ [ メッセージ編集済み 編集者: なんとか 編集日時 2007-05-08 14:38 ] |
|
投稿日時: 2007-05-08 15:01
アンマネージ コードとの相互運用
|
|
投稿日時: 2007-05-08 17:54
Hongliangさんありがとうございます。
APIの呼び出しについては大丈夫かと思うのですがUNLHA32のAPIがうまく使えてないのでしょうか。 もう一度よく見て書き直したのですが DllImportの部分のAPIの型が違っていたためIntegerからLongに変えて実行したところ UnlhaFindFirstが正常に処理されていないようでした。 何か対処方法はありませんでしょうか。 よろしくご教授のほどよろしくお願いします。 ------------------------------------------------------------ Private Structure INDIVISUALINFO Public dwOriginalSize As Long Public dwCompressedSize As Long Public dwCRC As Long Public uFlag As Long Public uOSType As Long Public wRatio As Integer Public wDate As Integer Public wTime As Integer <VBFixedStringAttribute(513)> Public szFileName As String <VBFixedStringAttribute(3)> Public dummy As String <VBFixedStringAttribute(8)> Public szAttribute As String <VBFixedStringAttribute(8)> Public szMode As String End Structure <System.Runtime.InteropServices.DllImport("UNLHA32.DLL")> _ Private Shared Function UnlhaOpenArchive(ByVal hwnd As Integer, ByVal szFileName As String, ByVal dwMode As Integer) As Long End Function <System.Runtime.InteropServices.DllImport("UNLHA32.DLL")> _ Private Shared Function UnlhaCloseArchive(ByVal harc As Integer) As Boolean End Function <System.Runtime.InteropServices.DllImport("UNLHA32.DLL")> _ Private Shared Function UnlhaFindFirst(ByVal harc As Integer, ByVal szWildName As String, ByVal lpSubInfo As INDIVISUALINFO) As Long End Function Protected Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UpLoadButton.Click Dim hwnd As Long Dim hwnd1 As Long Dim hwnd2 As Long Dim udtINDIVISUALINFO As INDIVISUALINFO = New INDIVISUALINFO hwnd = UnlhaOpenArchive(0, archiveFile, 0) hwmd1 = UnlhaFindFirst(hwnd, "*.*", udtINDIVISUALINFO) hwnd2 = UnlhaCloseArchive(hwnd) End Sub ------------------------------------------------------------ ※archiveFileは圧縮ファイルのパスです。 [ メッセージ編集済み 編集者: なんとか 編集日時 2007-05-08 17:58 ] |
|
投稿日時: 2007-05-08 18:32
アンマネージ DLL が要求する型に対応する .NET Framework の型も、
構造体の中に固定長の文字列が含まれる場合のサンプルも、 全部リンク先に書かれていますよ。 よく調べてください。 ちなみに、オブジェクトを .NET Framework とそのほか(ネイティブの DLL や COM)の間で相互変換することを、MS は「マーシャリング」と呼んでいます。 |
1