Ich mache einige C# Interop Arbeit. Ich habe folgende Struktur:C#: Marshalling einer Struktur, die Arrays enthält
#pragma pack(push,1)
typedef struct
{
unsigned __int64 Handle;
LinkType_t Type;
LinkState_t State;
unsigned __int64 Settings;
signed __int8 Name[MAX_LINK_NAME];
unsigned __int8 DeviceInfo[MAX_LINK_DEVINFO];
unsigned __int8 Reserved[40];
} LinkInfo_t;
Das ist mein Versuch ist es in eine C# struct zu konvertieren:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct LinkInfo_t
{
[MarshalAs(UnmanagedType.U8)]
public UInt64 Handle;
MarshalAs(UnmanagedType.I4)]
public LinkType_t Type;
[MarshalAs(UnmanagedType.I4)]
public LinkState_t State;
[MarshalAs(UnmanagedType.U8)]
public UInt64 Settings;
[MarshalAs(UnmanagedType.LPStr, SizeConst = MAX_LINK_NAME)]
public string Name;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_LINK_DEVINFO, ArraySubType = UnmanagedType.U1)]
public byte[] DeviceInfo;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 40, ArraySubType = UnmanagedType.U1)]
public byte[] Reserved;
}
Jedes Mal, wenn ich initialisieren die Struktur der Name Device und Reservierte Felder sind alle gesetzt zu null. Wie behebe ich das?
Dies funktioniert für die Arrays. Die korrekte Syntax ist jedoch öffentliches festes Byte DeviceInfo [MAX_LINK_DEVINFO]; Ich muss auch die Struktur als unsicher deklarieren. –
Sie haben Recht, ich habe es –