имеется код
//структура которую надо преобразовать
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct IMAGE_DATA_DIRECTORY
{
public byte b;
public byte[] b2
}
.....
//преобразовываю так
IMAGE_DATA_DIRECTORY user;
user.b = 1;
user.b4=new byte[]{2,3,4,5,6};
IntPtr SitList;
unsafe
{
SitList = Marshal.AllocHGlobal(Marshal.SizeOf(user));
byte[] buffer = new byte[Marshal.SizeOf(user)];
GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
Marshal.StructureToPtr(user, SitList, false);
Marshal.StructureToPtr(user, handle.AddrOfPinnedObject(), false);
Marshal.Copy(handle.AddrOfPinnedObject(), buffer, 0, buffer.Length);
handle.Free();
}
при этом в buffer заместо массива судя повсему пишется адрес массива
Как сделать так чтобы записывался сам массив?
Здравствуйте, shvchenkoalexey, Вы писали:
S>при этом в buffer заместо массива судя повсему пишется адрес массива
S>Как сделать так чтобы записывался сам массив?
Marshaling for Arrays
Здравствуйте, shvchenkoalexey, Вы писали:
S>Как сделать так чтобы записывался сам массив?
public unsafe struct IMAGE_DATA_DIRECTORY
{
public byte b;
public fixed byte b2[2];
}
S>//структура которую надо преобразовать
S> [StructLayout(LayoutKind.Sequential, Pack = 1)]
S> struct IMAGE_DATA_DIRECTORY
S> {
S> public byte b;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = нужный размер)]
S> public byte[] b2
S> }