VB.net调用DLL,捕捉到AccessVioationException尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
vb6中能正常调用,现在要使用VB.net调用。调用函数里面有自定义的结构体作为参数,vb6和VB.net的结构体不一样。VB6中是这样定义的,调试的时候计算了下数据长度...
vb6中能正常调用,现在要使用VB.net调用。调用函数里面有自定义的结构体作为参数,vb6和VB.net的结构体不一样。VB6中是这样定义的,
调试的时候计算了下数据长度是正常的,有1528个字节,应该是分配了相应的内存空间的。然后我在VB.net是这样定义的
应该在vb.net的结构体定义中不能指定数组个数。所以只有用下面那个函数进行重定义。
问题是我定义一个新的变量如
Dim X as new dc_msg
x.Initialize()
,发现X的数据长度只有16。没有分配相应的内存空间吗?
怎么解决——"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"v 这个问题呢??
跪求答案!!!!!
我觉得应该是结构体的问题,结构体的生成没有严格按照我定义的顺序,而是按首字母顺序,在内存空间中也是这样存储的?怎么严格按照我定义的顺序存储啊??? 展开
调试的时候计算了下数据长度是正常的,有1528个字节,应该是分配了相应的内存空间的。然后我在VB.net是这样定义的
应该在vb.net的结构体定义中不能指定数组个数。所以只有用下面那个函数进行重定义。
问题是我定义一个新的变量如
Dim X as new dc_msg
x.Initialize()
,发现X的数据长度只有16。没有分配相应的内存空间吗?
怎么解决——"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"v 这个问题呢??
跪求答案!!!!!
我觉得应该是结构体的问题,结构体的生成没有严格按照我定义的顺序,而是按首字母顺序,在内存空间中也是这样存储的?怎么严格按照我定义的顺序存储啊??? 展开
2个回答
展开全部
不要用 Initialize,直接用 New 构造函数。
Public Sub New()
MyByte = New Byte(Size) {} 'Size就是数组的大小
End Sub
更多追问追答
追问
我已经试过这个方法了,还是一样的错误啊~
追答
没有问题。
Public Class Form1
Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
Dim X As New TestA(1)
X.MyByte(17) = 212
MsgBox(CStr(X.Index) & ", " & CStr(X.MyByte(17)))
End Sub
End Class
Public Structure TestA
Public Index As Long
Public MyByte As Byte()
Public MyStr As String
Sub New(ByVal Idx As Long)
Index = Idx
MyStr = "Hello world."
MyByte = New Byte(20) {}
End Sub
End Structure
已经测试运行通过。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询