일부 C# interop 작업을 수행하고 있습니다. 이것은 C#을 구조체로 변환하는 나의 시도배열을 포함하는 구조체를 마샬링 C# :
#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;
: 나는 다음과 같은 구조체가 그러나
[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;
}
를, 내가 구조체 이름, DeviceInfo를 초기화하고 예약 필드는 모든 설정 때마다 null로. 이 문제를 어떻게 해결할 수 있습니까?
배열에 대해 작동합니다. 그러나 올바른 구문은 공용 고정 바이트 DeviceInfo [MAX_LINK_DEVINFO]입니다. 또한 구조체를 안전하지 않은 것으로 선언해야합니다. –
맞습니다. 안전하지 않고 고정 된 대신 –