タイトル | : unlha32でコールバック設定を行えない |
記事No | : 10429 |
投稿日 | : 2011/02/04(Fri) 01:38 |
投稿者 | : A.K |
はじめまして。 unlha32.dllを使用して、VBからアーカイブを解凍するプログラムを作ろうと思っています。 解凍の際、ファイルの情報を得るためにUnlhaSetOwnerWindowEx64でコールバックを受け取りたいのですが、UnlhaSetOwnerWindowEx64を呼び出すとエラーとなり、ERROR_EXECUTABLE_FILE (0x804C)が返ります。 マニュアルを見ると、 「ERROR_EXECUTABLE_FILE (0x804C) エラーのエラーメッセージを指定します。 API に渡された各パラメータの整合性がとれていないことを示します。」 とあり、APIへの値の引き渡しがうまく行っていないということは分かったのですが、どこが間違っているのかが分からず行き詰まってしまいました。 どなたか分かる方がいらっしゃいましたら、ご教示いただければと思い投稿しました。
当方WinXP、VB2005です。 よろしくお願いします。
宣言部: <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _ Public Structure EXTRACTINGINFO Public dwFileSize As Integer Public dwWriteSize As Integer <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=513)> _ Public szSourceFileName As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=3)> _ Public dummy1 As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=513)> _ Public szDestFileName As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=3)> _ Public dummy As String End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _ Public Structure EXTRACTINGINFO64 Public dwStructSize As Integer Public exinfo As EXTRACTINGINFO Public llFileSize As Long Public llCompressedSize As Long Public llWriteSize As Long Public dwAttributes As Integer Public dwCRC As Integer Public uOSType As Integer Public wRatio As Short Public ftCreateTime As Long Public ftAccessTime As Long Public ftWriteTime As Long <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=513)> _ Public szSourceFileName As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=3)> _ Public dummy1 As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=513)> _ Public szDestFileName As String <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=3)> _ Public dummy As String End Structure
<DllImport("unlha32", _ EntryPoint:="UnlhaSetOwnerWindowEx64", _ ExactSpelling:=True)> _ Private Shared Function UnlhaSetOwnerWindowEx64(ByVal _hwnd As IntPtr, _ ByVal _lpArcProc As IntPtr, _ ByVal _dwStructSize As Integer) As Boolean End Function
コード部: Dim struct As EXTRACTINGINFO64 struct = New EXTRACTINGINFO64 If Not UnlhaSetOwnerWindowEx64(me.handle, IntPtr.Zero, Marshal.SizeOf(struct)) Then '〜〜 ここで失敗 〜〜 End If
〜UNLHA32 WINMES.TXTより〜 BOOL WINAPI UnlhaSetOwnerWindowEx64( const HWND _hwnd, LPARCHIVERPROC _lpArcProc, const DWORD _dwStructSize ) 機能 UNLHA32.DLL の展開状況を受け取るためのコールバック関数の指定を行 います。_lpArcProc に NULL を指定すると _hwnd で指定したウィンド ウに メッセージを送出します。
引数 _hwnd メッセージを受け取るウィンドウ。 _lpArcProc 情報を受け取るためのコールバック関数へのポインタ。 _dwStructSize 使用する構造体のモード。実際には EXTRACTINGINFO- EX,EXTRACTINGINFOEX32, EXTRACTINGINFOEX64 の中 で使用するものを決定し,そのサイズを指定する必要 があります。
----------------------------------------------------------------------- %4. EXTRACTINGINFO の構造 ----------------------------------------------------------------------- 構造体定義 typedef struct { DWORD dwFileSize; DWORD dwWriteSize; TCHAR szSourceFileName[FNAME32_MAX + 1]; TCHAR dummy1[3]; TCHAR szDestFileName[FNAME32_MAX + 1]; TCHAR dummy[3]; } EXTRACTINGINFO
メンバーの説明 dwFileSize 格納ファイルのサイズ。 dwWriteSize 展開処理で書き込んだサイズ。 szSourceFileName 処理を行う格納ファイル名。 szDestFileName 実際に書き込まれるパス名。
----------------------------------------------------------------------- %7. EXTRACTINGINFOEX64 の構造 ----------------------------------------------------------------------- 構造体定義 typedef struct { DWORD dwStructSize; EXTRACTINGINFO exinfo; ULHA_INT64 llFileSize; ULHA_INT64 llCompressedSize; ULHA_INT64 llWriteSize; DWORD dwAttributes; DWORD dwCRC; UINT uOSType; WORD wRatio; FILETIME ftCreateTime; FILETIME ftAccessTime; FILETIME ftWriteTime; TCHAR szMode[8]; TCHAR szSourceFileName[FNAME_MAX32 + 1]; TCHAR dummy1[3]; TCHAR szDestFileName[FNAME_MAX32 + 1]; TCHAR dummy2[3]; } EXTRACTINGINFOEX;
|