DataTable
*.dbf ファイル (dBase IV)に保存します。だから私はこのような構造を持っています:
[StructLayout(LayoutKind.Explicit, Pack = 1)]
public struct DbfHeader
{
[FieldOffset(0)]
private byte versionNumber;
[FieldOffset(1)]
private byte yearOfLastUpdate;
[FieldOffset(2)]
private byte monthOfLastUpdate;
[FieldOffset(3)]
private byte dayOfLastUpdate;
[FieldOffset(4)]
private Int32 numberOfRecords;
[FieldOffset(8)]
private Int16 lengthOfHeader;
[FieldOffset(10)]
private Int16 lengthOfEachRecord;
[FieldOffset(12)]
private Int16 reserved1;
[FieldOffset(14)]
private byte incompleteTransaction;
[FieldOffset(15)]
private byte encryptionFlag;
[FieldOffset(16)]
private byte[] freeRecordThread;
[FieldOffset(20)]
private byte[] reserved2;
[FieldOffset(28)]
private byte mdxFlag;
[FieldOffset(29)]
private byte languageDriver;
[FieldOffset(30)]
private Int16 reserved3;
public DbfHeader(int numberOfRecords, int numberOfFields, short recordLength, Encoding encoding)
{
// some code that initialize each field
}
}
また、次のようにDbfHeader
変数をbyte[]
配列に変換する方法があります。
public static byte[] StructureToByteArray<T>(T structure)
{
int len = Marshal.SizeOf(structure);
byte[] result = new byte[len];
IntPtr ptr = Marshal.AllocHGlobal(len);
Marshal.StructureToPtr(structure, ptr, true);
Marshal.Copy(ptr, result, 0, len);
Marshal.FreeHGlobal(ptr);
return result;
}
しかし、この方法はうまくいきません。行で、Marshal.StructureToPtr(structure, ptr, true)
次の例外が発生します。
Attempted to read or write protected memory.
This is often an indication that other memory is corrupt.
誰が何がうまくいかないのか知っていますか?どんな助けでも大歓迎です。