根据struct SCHead {
WORD m_nType;
char m_cStatus;
long m_lIndex;
};改写[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct SCHead
    {
        public UInt16 m_nType;
        public Char m_cStatus;
        public Int32 m_lIndex;
    }发现2个的sizeof相差1位,可能是造成接口调用出错的原因调试后发现问题出在char类型,
c++下,sizeof(sca.m_Head.m_cStatus)为1
而c#下,为2应怎样设置,可以使他们的size相同

解决方案 »

  1.   

    使用[FieldOffset(20)]类似:
    [StructLayout(LayoutKind.Explicit)]
    public class SYSTEM_INFO
    {
    [FieldOffset(0)] public ulong OemId;
    [FieldOffset(4)] public ulong PageSize;
    [FieldOffset(16)] public ulong ActiveProcessorMask;
    [FieldOffset(20)] public ulong NumberOfProcessors;
    [FieldOffset(24)] public ulong ProcessorType;
    }
      

  2.   

    public Char m_cStatus;
    >>>
    public byte m_cStatus;.NET的char都是unicode的,native的char对应byte
      

  3.   

    同意楼上的,C#下所有的char和字符串都是unicode类型的