问题描述
c++原型typedefstructTag_Report{union{RoReporttRoReport;EventReporttEventReport;}report;unsignedintnResType;}Report;我转为c#如下[StructLayoutAttribute(LayoutKind.Sequential)]publicstructReport{publicreportreport;publicuintnResType;}[StructLayoutAttribute(LayoutKind.Explicit)]publicstructreport{[FieldOffsetAttribute(0)]RoReporttRoReport;[FieldOffsetAttribute(0)]EventReporttEventReport;}编译没错,运行时报出:未能从程序集“EPC,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”中加载类型“report”,因为它在8偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠。有没有人会啊,各位大神们,指点指点
解决方案
解决方案二:
结构贴全行吗?
解决方案三:
[FieldOffsetAttribute(8)]EventReporttEventReport;
解决方案四:
RoReport和EventReport结构体如下:[StructLayoutAttribute(LayoutKind.Sequential)]publicstructRoReport{publicstringa;publicstringbpublicintc;publicuintd;publicushorte;publicushortf;publicuintg;publiculongh;}[StructLayoutAttribute(LayoutKind.Sequential)]publicstructEventReport{uintmm;ulongullTime;intnSpecIndex;}[FieldOffsetAttribute(8)]的值到底是怎么确定的呢?
解决方案五:
[FieldOffsetAttribute(8)]EventReporttEventReport还是出现:未能从程序集“EPC,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”中加载类型“report”,因为它在8偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐。这个错误
解决方案六:
解决方案七:
string???这个不好玩了C++里对这个RoReport原始定义是什么,你的贴一下。string不给size,有些玄
解决方案八:
结构体里如果用String必须加上MashalAsAttribute
解决方案九:
c++原型:typedefstructRoReport{char*ptTagBuf;char*ptOpBuf;intnRes;unsignedintnResType;unsignedshortnOpId;unsignedshortwAntId;unsignedlonglongullTimestamp;}RoReport;你确定:结构体里如果用String必须加上MashalAsAttribute吗?可不可以帮我写一下呀?
解决方案十:
引用8楼gut_GIS的回复:
你确定:结构体里如果用String必须加上MashalAsAttribute吗?可不可以帮我写一下呀?
[MashalAs(UnmanagedType.LPTStr)]这边不一定是LPTStr,可能是LPStr、LPWStr等等,要看你的程序编码
解决方案十一:
感觉好复杂啊,那我该怎么写呢?给个例子吧
解决方案十二:
我觉得就调用一个普通的由c++编译出的dll而已,没这么复杂的。可惜我对c语言不太会,大神们,能来点干货吗???