मैं कुछ सी # इंटरऑप काम कर रहा हूँ।सी #: एक संरचना को marshalling जिसमें arrays
#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;
यह बात एक सी # struct में तब्दील करने के लिए अपने प्रयास है: मैं निम्नलिखित struct है
[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;
}
बहरहाल, जब भी मैं struct नाम, DeviceInfo, प्रारंभ और सुरक्षित क्षेत्रों पूरी तरह से तैयार कर रहे हैं शून्य करने के लिए। मैं यह कैसे तय करुं?
यह सरणी के लिए काम करता है। हालांकि सही वाक्यविन्यास सार्वजनिक फिक्स्ड बाइट डिवाइसइन्फो [MAX_LINK_DEVINFO] है; मुझे भी संरचना को असुरक्षित घोषित करना होगा। –
आप सही हैं, मैंने इसे असुरक्षित और निश्चित के बजाय –