vb.net语言调用dll函数出现“读取或写入受保护内存。这通常指示
发布时间:2020-12-16 22:18:19 所属栏目:大数据 来源:网络整理
导读:这个问题我也纠结了很久,最终还是给我ko了!哈哈…… 解决方法: 在调用外面dll函数的时候,首先要在模块里面通过declear来声明函数的,另外还有结构体也需要声明。注意,每个数据的类型要跟dll说明文档里面的一致才行,切不可疏忽!结构体里面有数组的时候
这个问题我也纠结了很久,最终还是给我ko了!哈哈…… 解决方法: 在调用外面dll函数的时候,首先要在模块里面通过declear来声明函数的,另外还有结构体也需要声明。注意,每个数据的类型要跟dll说明文档里面的一致才行,切不可疏忽!结构体里面有数组的时候,在vb6.0下面是可以直接赋值大小的,但是在.net下面是不允许这样做的。要在结构体(其实是不能继承的类而已)里面声明构造函数,在外面用new构建实例对象便可自动调用构造函数,在构造函数里面初始化数组大小就可以了!要不然编译会报错!在dll结构里面的数组前面加上一个语句限制其大小才行,不然执行的时候会发生错误! 例如下面: Public Structure VCI_CAN_OBJ Dim ID As UInt32 Dim TimeStamp As UInt32 Dim TimeFlag As Byte Dim SendType As Byte Dim RemoteFlag As Byte Dim ExternFlag As Byte Dim DataLen As Byte <MarshalAs(UnmanagedType.ByValArray,SizeConst:=8)> _ Dim data() As Byte <MarshalAs(UnmanagedType.ByValArray,SizeConst:=2)> _ Dim Reserved() As Byte Public Sub New(ByVal a As Int16,ByVal b As Int16) ReDim data(a) ReDim Reserved(b) End Sub End Structure就是这样了!这样就解决了这个问题! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |