在VB.net中如何取变量、结构、数组、函数的地址?

在VB6中可以取变量、结构、数组、函数的地址,那么在VB.net中能不能取到变量、结构、数组等的地址?表示还没接触这门新语言,求详解... 在VB6中可以取变量、结构、数组、函数的地址,那么在VB.net中能不能取到变量、结构、数组等的地址?表示还没接触这门新语言,求详解 展开
 我来答
tystq
2015-08-03 · TA获得超过1201个赞
知道小有建树答主
回答量:943
采纳率:100%
帮助的人:832万
展开全部

当然可以的,需要System.Runtime.InteropServices 命名空间中的 Marshal 类

Imports System.Runtime.InteropServices '这里一定要有 
Public Class Form1
    Public Structure m_Point
        Dim x As Integer
        Dim y As Integer
    End Structure
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i As Integer = 50
        Dim ai() As Integer = {1, 2, 3, 4, 5}
        Dim pi As IntPtr = GCHandle.Alloc(i, GCHandleType.Pinned).AddrOfPinnedObject() '取得整形变量的指针 
        Dim pai As IntPtr = GCHandle.Alloc(ai, GCHandleType.Pinned).AddrOfPinnedObject() '取得整形数组首地址指针

        MsgBox(Marshal.ReadInt32(pi, 0)) '读回整形变量指针指向的值
        MsgBox(Marshal.ReadInt32(pai, 0 * 4)) '读回数组的第一个元素
        MsgBox(Marshal.ReadInt32(pai, 1 * 4)) '读回数组的第二个元素
        MsgBox(Marshal.ReadInt32(pai, 2 * 4)) '读回数组的第三个元素

        '-----下面是结构--------------------------
        Dim m_p As New m_Point
        m_p.x = 100
        m_p.y = 50
        Dim pm_p As IntPtr = GCHandle.Alloc(m_p, GCHandleType.Pinned).AddrOfPinnedObject() '取得结构首地址指针 
        MsgBox(Marshal.ReadInt32(pm_p, 0 * 4)) '读回结构的第一个值
        MsgBox(Marshal.ReadInt32(pm_p, 1 * 4)) '读回结构的第二个值
    End Sub
End Class
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式