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
}; --------------------编程问答-------------------- 没人解答下嘛 --------------------编程问答-------------------- 这样转换:
--------------------编程问答-------------------- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
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;
}
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#