问题描述
我在调用C的一个lib文件时,要用到里面的一个函数。函数原型是longWriteMemTbl(CONSTCHAR*filename,CONSTLONGRecordNo,CONSTvoid*buffer,CONSTLONGsize,CONSTLONGBlockTime);我所做程序如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;namespace中间件写共享区{classProgram{[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]structrm_vsb_set{[MarshalAs(UnmanagedType.SysUInt,SizeConst=12)]publicintDescaPattern;[MarshalAs(UnmanagedType.R8,SizeConst=12)]publicfloatEdgerGap;[MarshalAs(UnmanagedType.R8,SizeConst=12)]publicfloatSideGuide;[MarshalAs(UnmanagedType.R8,SizeConst=12)]publicfloatEdgerDraft;[MarshalAs(UnmanagedType.R8,SizeConst=12)]publicfloatBarLength;}[DllImport("RDMAPI.dll",CharSet=CharSet.Ansi,SetLastError=true)]staticexternunsafelongWriteMemTbl([MarshalAs(UnmanagedType.LPStr)]stringfilename,longRecordNo,[MarshalAs(UnmanagedType.LPStruct)]refrm_vsb_setbuffer,longsize,longBlockTime);staticvoidMain(string[]args){rm_vsb_set_RmVsbSets=newrm_vsb_set();_RmVsbSets.DescaPattern=2222;_RmVsbSets.EdgerGap=10;_RmVsbSets.SideGuide=10;_RmVsbSets.EdgerDraft=10;_RmVsbSets.BarLength=400;longrecordNo=10,retc=WriteMemTbl("RmVsbSet",recordNo,ref_RmVsbSets,System.Runtime.InteropServices.Marshal.SizeOf(_RmVsbSets),100);if(retc>0){Console.WriteLine("OK!n"+retc);}}}}
报的错误如下:未处理异常:SYSTEM.ARGUMENTEXCEPTION:类型“中间件共享区.rm_vsb_set”不能作为非托管结构进行封送处理,无法计算有意义的大小或偏移量。我是C#新手,烦请各位帮指点一下。
解决方案
解决方案二:
该回复于2008-04-10 14:54:47被版主删除
解决方案三:
这个,我还是没有找到,麻烦指点一下:)