vb.net语言调用dll函数出现“读取或写入受保护内存。这通常指示其他内存已损坏。”

前端之家收集整理的这篇文章主要介绍了vb.net语言调用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
就是这样了!这样就解决了这个问题!

猜你在找的VB相关文章