dll 联合体 报错 。它在 8 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐。

问题描述

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语言不太会,大神们,能来点干货吗???

时间: 2024-10-06 00:07:16

dll 联合体 报错 。它在 8 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐。的相关文章

dll调用-jdk1.6下用jna调用dll库报错,换成jdk1.7成功

问题描述 jdk1.6下用jna调用dll库报错,换成jdk1.7成功 使用jkd1.6提示java.lang.UnsatisfiedLink,换成jdk1.7就可以了,请问有没有熟悉的大神知道是什么原因 解决方案 http://bbs.csdn.net/topics/390509805

c#调用delphi编写的dll文件报错,尝试读取或写入受保护的内存

问题描述 c#调用delphi编写的dll文件报错,尝试读取或写入受保护的内存 delphi函数原型 Procedure invoke(params :PChar; result : PChar) ; 解决方案 把这个delphi的原型改一下,改为 Function Pchar invoke(params :PChar) ; 再试试 解决方案二: Function invoke(params: PAnsiChar): PAnsiChar ;

股票-通信达绑定dll文件报错

问题描述 通信达绑定dll文件报错 使用通信达股票软件绑定dll文件报错如下:绑定失败!此DLL不符合要求. 这应做何解释? 解决方案 http://help.tdx.com.cn/book.asp 通达信DLL函数编程规范.rar 下载这个规范,看你的哪里不符合要求.

c++-报错“使用简体中文(GB2312)编码加载文件时,有些字节已用Unicode替换字符替换”

问题描述 报错"使用简体中文(GB2312)编码加载文件时,有些字节已用Unicode替换字符替换" 以前遇到过这样的问题,是因为我要往一个不存在的文件夹路径写文件,这次我的程序已经运行到最后的return语句了,还会这样报错!这是为什么?希望有大神不吝赐教! 解决方案 贴下代码,设置字符集和出错的地方 解决方案二: 打开你要读的文件,先转为GB 再试试,看出错原因可能是你要读的文件中有Unicode编码的字符.或者你程序设置为Unicode,再去读文件试试.

@(报错)could not find the main class, Program will exit(已解决)

原文 @(报错)could not find the main class, Program will exit(已解决)      (很抱歉,如果你希望能更加清楚地看清图片或是图上的文字的话,你可以按住ctrl不动,然后向上滚动鼠标的滚轮.要改变回来同理向下滚动即可.) -------------------------------------------------------------------- 今天2011.4.20: 这篇文章是我刚接触myeclipse的时候写的,一年过去了,感

.net 2.0 mscorwks.dll开机报错问题的解决方法

早上一开机,发现服务器出现.net 2.0报错. 描述: Faulting application marc.mais.exe, version 2.0.0.11, stamp 46e64d37, faulting module mscorwks.dll, version 2.0.50727.42, stamp 4333e7ec, debug? 0, fault address 0x0025d237. 事件类型:    错误 事件来源:    .NET Runtime 2.0 Error Rep

关于java中用JNative调用dll文件报错的问题,跪求大神解决

问题描述 我在Eclipse中新建一个java工程,在java文件中用JNative调用dll文件,我把JNativeCpp.dll放在的C:WindowsSystem32中,把JNative.jar放在C:ProgramFilesJavajre7libext中,可是运行的时候总是报错JNativelibrarynotloaded,sorry!求解决啊,弄了一下午了,快死人了,还没调出来! 解决方案 解决方案二:JNativeCpp.dll放在的C:Windows下试试

quartz 不执行也不报错是怎么回事

问题描述 <!--调度任务--><beanid="task"class="org.springframework.scheduling.quartz.JobDetailBean"><propertyname="jobClass"value="com.sms.util.EveryWeekTask"></property></bean><!--按频率调度-->

MDaemon日志报错:550 aa@*.com must check for new mail first

最近在smtp入的日志看到一个报错,跟大家分享一下.截取了其中一段日志,报错信息如下: 该vin..的用户使用bis绑定了自己的企业邮局.发送邮件是报错550 vin*@*.cn  check for new mail first,这个意思是说请检查一下是否有新邮件.看到这个报错解释,就应该立刻想到mdaemon的用户验证方式里有一个pop先于smtp验证,这种验证方式用简单的语言表达就是:在发送邮件之前,先要进行收邮件,默认有效时间是5分钟.取消这个具体操作:安全---安全设置---pop先于