Vb.net 名称';VarPtr';未声明。在旧的vb代码中

Vb.net 名称';VarPtr';未声明。在旧的vb代码中,vb.net,pointers,vb6,vb6-migration,Vb.net,Pointers,Vb6,Vb6 Migration,我有一个旧的VB代码。现在我把它转换成VB.net。代码中有一行 将参数设置为整数 pCParameters=VarPtr(参数) 当我执行代码时,错误发生了 未声明名称“VarPtr” vb.net中不支持VarPtr。因此,我如何替换它。这并不是那么简单,因为.net中的变量是可管理的。要准确地执行您要求的操作,您需要查看GCHandle.Alloc并锁定变量,使其无法移动。然后您可以获取它的内存地址。 类似这样的东西(从记忆中): 这并不是那么简单,因为.NET中的变量是可以管理的。要准确

我有一个旧的VB代码。现在我把它转换成VB.net。代码中有一行

将参数设置为整数

pCParameters=VarPtr(参数)

当我执行代码时,错误发生了

未声明名称“VarPtr”


vb.net中不支持VarPtr。因此,我如何替换它。

这并不是那么简单,因为.net中的变量是可管理的。要准确地执行您要求的操作,您需要查看GCHandle.Alloc并锁定变量,使其无法移动。然后您可以获取它的内存地址。
类似这样的东西(从记忆中):


这并不是那么简单,因为.NET中的变量是可以管理的。要准确地执行您要求的操作,您需要查看GCHandle.Alloc并锁定变量,使其无法移动。然后您可以获取它的内存地址。
类似这样的东西(从记忆中):


是的,我找到了答案。新的VarPtr函数是

Public Function VarPtr(ByVal e As Object) As Integer
Dim GC As GCHandle = GCHandle.Alloc(e, GCHandleType.Pinned)
Dim GC2 As Integer = GC.AddrOfPinnedObject.ToInt32
GC.Free()
Return GC2

是的,我找到了答案。新的VarPtr函数是

Public Function VarPtr(ByVal e As Object) As Integer
Dim GC As GCHandle = GCHandle.Alloc(e, GCHandleType.Pinned)
Dim GC2 As Integer = GC.AddrOfPinnedObject.ToInt32
GC.Free()
Return GC2

解决方案可能取决于上下文。您能否发布关于如何使用pCParameters的代码…pCParameters定义为整数。您能否显示在此代码之后如何使用参数?我怀疑它可能会被传递给外部DLL函数,如果是这样的话,知道这对解决方案非常重要。我讨厌人们仅仅因为代码看起来简单,理论上太简单而否决问题。varPtr需要特殊处理+1从MEI中,使用VarPtr是必要的?解决方案可能取决于上下文。您能否发布关于如何使用pCParameters的代码…pCParameters定义为整数。您能否显示在此代码之后如何使用参数?我怀疑它可能会被传递给外部DLL函数,如果是这样的话,知道这对解决方案非常重要。我讨厌人们仅仅因为代码看起来简单,理论上太简单而否决问题。varPtr需要特殊处理+1从meIs需要使用VarPtr吗?如果代码被破坏,只要释放
GCHandle
,GC就可以重新定位对象
e
。如果你想固定一个对象,你必须维护
GCHandle
实例。真正的答案是理解原始代码在用这个指针蒙骗时试图做什么。在.Net中可能有更好的方法来实现此目标。此答案返回一个死指针,任何人都不应使用。该代码被破坏,只要释放
GCHandle
,GC就可以重新定位对象
e
。如果你想固定一个对象,你必须维护
GCHandle
实例。真正的答案是理解原始代码在用这个指针蒙骗时试图做什么。在.Net中可能有更好的方法来实现目标。这个答案返回一个死指针,任何人都不应该使用。