这个问题我也纠结了很久,最终还是给我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就是这样了!这样就解决了这个问题!