当前位置:编程学习 > C#/ASP.NET >>

C#接收 C++ 传送的结构体 问题

C++ 中结构体如下:
typedef struct
{
E_QUERYROOTMODEL eRootModel;
E_QUERYLEVELMODEL eLevelModel;
BOOL bRetrieveImage;
}QRIDENTIFIERS;

C#中我是以下这么定义结构体的:
    [StructLayout(LayoutKind.Sequential)]
    public struct Qridentifiers
    {
        [MarshalAs(UnmanagedType.U4)]
        public EnumQueryrootmodel eRootModel;
        [MarshalAs(UnmanagedType.U4)]
public EnumQuerylevelmodel eLevelModel;
        [MarshalAs(UnmanagedType.U4)]
public int bRetrieveImage;
    }

接收到的结构体数据很大。228545514这种的
如何解决! --------------------编程问答-------------------- 这个E_QUERYROOTMODEL,是什么类型,你先贴出来看看。。。 --------------------编程问答-------------------- typedef enum E_QUERYROOTMODEL
{
     ROOT_QRMPatient = 0,
     ROOT_QRMStudy,
     ROOT_QRMPatientStudyOnly
}; --------------------编程问答-------------------- 没人解答下嘛 --------------------编程问答-------------------- 这样转换:

    public enum E_QUERYROOTMODEL
    {
        ROOT_QRMPatient = 0,
        ROOT_QRMStudy,
        ROOT_QRMPatientStudyOnly
    };

    public enum E_QUERYLEVELMODEL
    {
        //这个你没有给出来,你模仿上一个就可以了
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct Qridentifiers
    {
        public EnumQueryrootmodel eRootModel;
        public EnumQuerylevelmodel eLevelModel;
        [MarshalAs(UnmanagedType.Bool)]
        public int bRetrieveImage;
     }
--------------------编程问答--------------------     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct Qridentifiers
    {
        public EnumQueryrootmodel eRootModel;
        public EnumQuerylevelmodel eLevelModel;
        [MarshalAs(UnmanagedType.Bool)]
        public bool bRetrieveImage;
     }

eRootModel和eLevelModel的值依然不对,bRetrieveImage可以的 --------------------编程问答-------------------- 由于枚举元素的默认基础类型为 int。,你可以用int来替换:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
  public struct Qridentifiers
  {
    public int eRootModel;
    public int eLevelModel;
    [MarshalAs(UnmanagedType.Bool)]
    public bool bRetrieveImage;
  }



使用是,进行强制转换! --------------------编程问答-------------------- 楼上能给个qq嘛 --------------------编程问答-------------------- 不好意思,公司上班期间,把QQ通道给封了!给了也办法联系!
你直接用csdn的短信也可以,我经常上csdn,会及时看到的。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,