1

従来の VB6 アプリを VB.NET にアップグレードする必要があります。このアプリは、メモリ アドレスをパラメーターの 1 つとして受け取る .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 に答える