Как поступить с доступом к переменным адресам в VB.NET? - PullRequest
1 голос
/ 24 декабря 2009

Мне нужно обновить устаревшее приложение VB6 до VB.NET; Это приложение использует вызов функции из .dll, который принимает адрес памяти в качестве одного из своих параметров. Приложение VB6 делает это с помощью функции VarPtr (), но эта функция не существует в .NET. Как получить расположение в памяти переменной в .NET?

-Edit1

Например

aVariable1 = aFunctionCall(VarPtr(aVariable2))

-Edit2

Точный вызов функции находится в DLL с именем FTD2XX.DLL, а точный вызов

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

Ответы [ 2 ]

1 голос
/ 24 декабря 2009

Это происходит автоматически, когда вы объявляете внешнюю функцию с помощью ключевого слова Declare. Все, что вам нужно сделать, это объявить аргумент с помощью ByRef. Это заставляет маршаллера P / Invoke передавать указатель на нативный код. То же самое, что VarPtr. Только если вы передаете ByVal, вы должны явно преобразовать переданный аргумент в указатель.

1 голос
/ 24 декабря 2009

Попытка передать адреса чего-либо из управляемого кода (.NET) в неуправляемую DLL может быть не самым лучшим планом. VB6 и VB.NET не имеют много общего, кроме похожего синтаксиса и похожего звучащего названия. Возможно, вам придется закрепить память перед передачей адреса. Вам нужно будет посмотреть вызов платформы: http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx

...