【问题标题】:Setting variable's value using its memory address使用其内存地址设置变量的值
【发布时间】:2015-12-25 13:34:00
【问题描述】:


      我对 vb.net 有一个大问题(我不喜欢它 - 我更喜欢 vb6)。
       我想创建一个“3DGraphics”类,当有人创建一些顶点并将它们加载到内存中,他将获得顶点所在位置的地址(简单地说:顶点数组的地址-我知道如何使用 VarPtrArray 获取地址)。

      然后用户可以获取地址并将其传递给名为“RotateScene”的类中的子类,该子类会将每个点旋转给定角度。问题是我不知道如何使用传递的地址访问数组的元素。我在谷歌上搜索了一下,我找不到任何具体的东西。你知道怎么做吗?

【问题讨论】:

标签: arrays vb.net memory


【解决方案1】:

使用指向数组的指针的问题是您需要在内存中修复数组,以便垃圾收集器无法移动它。这意味着您不能只获取指针并单独使用它,您只能在随后释放数组的代码块中使用它。

不使用指针,只需使用对数组的引用。在 VB.NET 中,当您传递数组时,不会复制数组,因此您只需将数组引用发送给更改数组的方法。该方法不获取数组的副本,而是获取对数组的引用,因此当它更改原始数组中的数组项时。

例子:

' Create an array
Dim vertexes(1) As Double
' Then put something in it
vertexes(0) = 1.0
vertexes(1) = 2.0

' Just pass the array normally
RotateScene(vertexes)
' When the method returns the array items has changed

方法:

Public Sub RotateScene(vertexes As Double())
  ' Change the array items in here
  vertexes(0) = 2.0
  vertexes(1) = 1.0
End Sub

【讨论】:

  • 你说的是byref?能给我一些代码吗?
  • @sergiureznicencu 不,Guffa 指的是引用类型:msdn.microsoft.com/en-us/library/t63sy5hs.aspx
  • @sergiureznicencu:如果您需要替换数组本身,您只需要ByRef,以更改您通常传递的数组中的项目(ByVal)。我在上面添加了一个示例。
猜你喜欢
  • 1970-01-01
  • 2021-01-05
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多