【问题标题】:How would one go about Accessing Variable Addresses in VB.NET如何在 VB.NET 中访问变量地址
【发布时间】:2009-12-23 23:59:44
【问题描述】:

我必须将旧版 VB6 应用程序升级到 VB.NET;此应用程序使用来自 .dll 的函数调用,该函数将内存地址作为其参数之一。 VB6 应用程序使用 VarPtr() 函数执行此操作,但 .NET 中不存在此函数。如何在 .NET 中检索变量的内存位置?

-编辑1

例如

aVariable1 = aFunctionCall(VarPtr(aVariable2))

-编辑2

确切的函数调用在名为 FTD2XX.DLL 的 DLL 中,确切的调用是

FT_STATUS = FT_ListDevices(arg1, arg2, _
    FT_LIST_BY_INDEX or FT_OPEN_BY_SERIAL_NUMBER)

【问题讨论】:

  • arg1 和 arg2 变量的类型是什么?

标签: vb.net pointers vb6 vb6-migration


【解决方案1】:

尝试将托管代码 (.NET) 中某些内容的地址传递给非托管 DLL 可能不是最佳计划。除了相似的语法和相似的名称之外,VB6 和 VB.NET 没有太多共同点。您可能需要在传递地址之前固定内存。您需要查看平台调用:http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx

【讨论】:

    【解决方案2】:

    当您使用 Declare 关键字声明外部函数时,它是自动的。您所要做的就是用 ByRef 声明参数。这会强制 P/Invoke 编组器将指针传递给本机代码。与 VarPtr 相同。只有传递 ByVal 时,才需要将传递的参数显式转换为指针。

    【讨论】:

      猜你喜欢
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多