最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

C#报"System.Runtime.InteropServices.SafeArrayTypeMismatchException"错误

C#/VB.NET 太平洋学习网 浏览 评论

小编C#项目使用结构体的时候出现“System.Runtime.InteropServices.SafeArrayTypeMismatchException”错误,经过发现小编的结构体类型属性用到了字符数组类型,所以报了错误,开始小编的结构体是这样定义的,如下:

    public struct FCINFTBL
    {
        public char[] htid;
        public char[] htdmy;
        public int adv;
        public int fileno; // 文件数量
        public int filesize;// 文件总大小
        public int jobcmd;// 0接收数据  //1 发送数据
        public int datatype;// 数据类型 
    }

然后小编使用的时候这样初始化,如下所示:

//初始化并使用
FCINFTBL ftbl;
//申明长度为6
ftbl.htid = new char[6];
//申明长度为2
ftbl.htdmy = new char[2];
ftbl.adv = 0;
ftbl.fileno = 0;
ftbl.filesize = 0;
ftbl.jobcmd = 0;
ftbl.datatype = 0;
//使用结构体
int cin = hst_getcinffirst(ref ftbl);

乍一看是不会有问题的,但是在程序运行之后,就会报SafeArrayTypeMismatchException错误。

解决方案:

在定义struct结构体的时候,如果该属性是数组类型,需要将上方的结构体改成如下这样即可,添加注释,申明结构体的长度即可。

    public struct FCINFTBL
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
        public char[] htid;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public char[] htdmy;
        public int adv;
        public int fileno; // 文件数量
        public int filesize;// 文件总大小
        public int jobcmd;// 0接收数据  //1 发送数据
        public int datatype;// 数据类型 
    }


来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/csharp/705.html

与本文相关的文章

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论