Я получаю следующую ошибку:
ArgumentException не обработан Тип не может быть маршализован, поскольку длина экземпляра встроенного массива не соответствует объявленной длине в макете.
On line Marshal.StructureToPtr (msg, buff, true
public static Byte[] SerializeMessage<T>(T msg) where T : struct
{
int objsize = Marshal.SizeOf(typeof(T));
Byte[] ret = new Byte[objsize];
IntPtr buff = Marshal.AllocHGlobal(objsize);
Marshal.StructureToPtr(msg, buff, true);
Marshal.Copy(buff, ret, 0, objsize);
Marshal.FreeHGlobal(buff);
return ret;
}
Ниже приведены структуры, которые я пытаюсь использовать:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct MsgStruct
{
public uint result;
public DS.DataSvcMetZoneDataC zone;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 240)]
public Types.GeographicLocationType[] geoLocation;
static public MsgStruct NewMsgStruct()
{
MsgStruct retValue = new MsgStruct();
retValue.geoLocation = new Types.GeographicLocationType[10];
for (int i = 0; i < 10; i++)
{
retValue.geoLocation[i] = Types.GeographicLocationType.NewMsgStruct();
}
return retValue;
}
}
и
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct GeographicLocationType
{
public double altitude;
public double latitude;
public double longitude;
static public GeographicLocationType NewMsgStruct()
{
GeographicLocationType structType = new GeographicLocationType();
return structType;
}
}
и
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct DataSvcMetZoneDataC
{
public int metID;
public ushort zoneNumber;
public ushort isDefined;
public double windDirection;
public double windSpeed;
public double airTemperature;
public double airPressure;
public ulong dataModifiedInd;
static public DataSvcMetZoneDataC NewMsgStruct()
{
DataSvcMetZoneDataC structType = new DataSvcMetZoneDataC();
return structType;
}
}
Я работаю, когда у меня нет массива позиций, но их имена 1 ... 10 кажется плохим решением для чего-то, чтодолжен уметь работать с массивом.