1

我必须将旧版 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)
4

2 回答 2

1

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

于 2009-12-24T00:08:19.947 回答
1

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

于 2009-12-24T00:21:24.553 回答