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 这个问题呢??
跪求答案!!!!!
我觉得应该是结构体的问题,结构体的生成没有严格按照我定义的顺序,而是按首字母顺序,在内存空间中也是这样存储的?怎么严格按照我定义的顺序存储啊???
展开
 我来答
money0_04c351c2
推荐于2016-01-14 · TA获得超过4141个赞
知道大有可为答主
回答量:5505
采纳率:49%
帮助的人:1577万
展开全部

不要用 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

已经测试运行通过。

wanganpingming
2014-09-12 · TA获得超过316个赞
知道小有建树答主
回答量:309
采纳率:0%
帮助的人:199万
展开全部
VB.net不懂,看来我也得学学啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式