C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: Tar32.dllの使用方法


(過去ログ 138 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■81231 / inTopicNo.1)  Tar32.dllの使用方法
  
□投稿者/ むぅ (6回)-(2016/09/03(Sat) 18:04:13)

分類:[.NET 全般] 

VS2010 .net3.5 C# Win7 32/64
お世話になります。

Tar32.dllでtarファイルの復元をしようとしていますが、うまくいかないため、
アドバイスをいただけないでしょうか。

[DllImport("tar32.dll", CharSet = CharSet.Ansi)]
public static extern int TarGetArchiveType(string strFileName);

[DllImport("tar32.dll", CharSet = CharSet.Ansi)]
public static extern UInt16 TarGetVersion();

[DllImport("tar32.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr TarOpenArchive(IntPtr hWnd,string strFileName, uint nMode);

[DllImport("tar32.dll", CharSet = CharSet.Ansi)]
public static extern Int32 TarFindFirst(IntPtr hArc, string strWildName, [Out] INDIVIDUALINFO lpSubInfo);

[StructLayout(LayoutKind.Sequential)]
public struct INDIVIDUALINFO{
UInt32 dwOriginalSize;
UInt32 dwCompressedSize;
UInt32 dwCRC;
UInt32 uFlag;
UInt32 uOSType;
UInt16 wRatio;
UInt16 wDate;
UInt16 wTime;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 513)]
Char [] szFileName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
Char [] dummy;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
Char [] szAttribute;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
Char [] szMode;


UInt16 ver = TarGetVersion(); →正常に取れている
int n = TarGetArchiveType(@"hoge.tar"); →正常に取れている

IntPtr pt = TarOpenArchive(this.Handle, @"hoge.tar", 0); →ハンドル値が入っている
INDIVIDUALINFO ii = new INDIVIDUALINFO();
Int32 nnn = TarFindFirst(pt, "*.*", ii);  →戻り値0で正常のように見えるが、iiには何も入っていない。


問題点などご指摘いただきたく、よろしくお願いします。
引用返信 編集キー/
■81232 / inTopicNo.2)  Re[1]: Tar32.dllの使用方法
□投稿者/ むぅ (7回)-(2016/09/03(Sat) 21:34:34)
自己解決です。
構造体でなく、クラスにすると取得できました。
お騒がせしました。

                      以上

No81231 (むぅ さん) に返信
> VS2010 .net3.5 C# Win7 32/64
> お世話になります。
>
> Tar32.dllでtarファイルの復元をしようとしていますが、うまくいかないため、
> アドバイスをいただけないでしょうか。
>
> [DllImport("tar32.dll", CharSet = CharSet.Ansi)]
> public static extern int TarGetArchiveType(string strFileName);
>
> [DllImport("tar32.dll", CharSet = CharSet.Ansi)]
> public static extern UInt16 TarGetVersion();
>
> [DllImport("tar32.dll", CharSet = CharSet.Ansi)]
> public static extern IntPtr TarOpenArchive(IntPtr hWnd,string strFileName, uint nMode);
>
> [DllImport("tar32.dll", CharSet = CharSet.Ansi)]
> public static extern Int32 TarFindFirst(IntPtr hArc, string strWildName, [Out] INDIVIDUALINFO lpSubInfo);
>
> [StructLayout(LayoutKind.Sequential)]
> public struct INDIVIDUALINFO{
> UInt32 dwOriginalSize;
> UInt32 dwCompressedSize;
> UInt32 dwCRC;
> UInt32 uFlag;
> UInt32 uOSType;
> UInt16 wRatio;
> UInt16 wDate;
> UInt16 wTime;
> [MarshalAs(UnmanagedType.ByValArray, SizeConst = 513)]
> Char [] szFileName;
> [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
> Char [] dummy;
> [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
> Char [] szAttribute;
> [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
> Char [] szMode;
>
>
> UInt16 ver = TarGetVersion(); →正常に取れている
> int n = TarGetArchiveType(@"hoge.tar"); →正常に取れている
>
> IntPtr pt = TarOpenArchive(this.Handle, @"hoge.tar", 0); →ハンドル値が入っている
> INDIVIDUALINFO ii = new INDIVIDUALINFO();
> Int32 nnn = TarFindFirst(pt, "*.*", ii);  →戻り値0で正常のように見えるが、iiには何も入っていない。
>
>
> 問題点などご指摘いただきたく、よろしくお願いします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -