Visual Basic では変数のアドレスを取得するには、方法

文書翻訳 文書翻訳
文書番号: 199824 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

そのメモリ アドレスなど、変数の低レベルの情報を取得する必要がありますは、Visual Basic のプログラマは一般的です。ただし、このような情報を必要とする一部の API 関数があります。この資料は、Visual Basic のプログラマはこの情報を取得する可能性があります、次の Visual Basic の関数について説明します。

VarPtr - 変数のアドレスを返します。

VarPtrArray - 配列のアドレスを返します。

StrPtr - UNICODE の文字列バッファーのアドレスを返します。

VarPtrStringArray - 文字列の配列のアドレスを返します。

ObjPtr - オブジェクトによって参照されるインターフェイスには、ポインターを返します変数です。

詳細

警告: 1 つまたは複数、次の機能をについて説明この記事では。VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr.これらの機能は、Microsoft テクニカル サポートではサポートされていません。Visual Basic のマニュアルには記載されていませんし、「として」このサポート技術情報」資料に記載されてマイクロソフトでは、Visual Basic の将来のリリースで利用されることは保証されません。

VarPtr

この関数は、変数または配列要素のアドレスを取得する使用できます。変数名またはパラメーターとしての配列の要素を取るし、そのアドレスを返します。ただし、VarPtr を使用して、配列要素のアドレスを取得するときは十分に注意する必要がありますので Visual Basic では、動的配列のロックを解除再する可能性がありますに注意してください。

次の使用例は、変数のアドレスを取得します。

Dim lngVariableAddress as Long
Dim dblMyVariable as Double
lngVariableAddress = VarPtr(dblMyVariable)
				

次の使用例は、配列の 4 番目の要素のアドレスを取得します。

Dim lngElementAddress as Long
Dim lngArrayOfLongs(9) as Long
' following will get address of 4th element
lngElementAddress = VarPtr(lngArrayOfLongs(3))
				

制限: VarPtr 関数は配列のアドレスを取得するのには使用できません。詳細については、「マイクロソフト関数」を参照してください。

VarPtrArray

Visual Basic で配列を Safearray として格納されます。SAFEARRAY 構造体のアドレスを取得するのには、マイクロソフトの機能を使用する必要があります。次の Visual Basic 5.0 および 6.0 の Visual Basic の宣言それぞれです。

Declare Function VarPtrArray Lib "msvbvm50.dll" Alias "VarPtr" _
(Var() as Any) As Long


Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" _
(Var() as Any) As Long
				

Safearray 型のアドレスを取得するのには、SAFEARRAY 名前 (かっこを含む) をマイクロソフト関数に渡します。

Dim lngSafeArrayAddress as Long
Dim lngArrayOfLongs(9) as Long
lngSafeArrayAddress = VarPtrArray(lngArrayOfLongs())
				

制限: Visual Basic で文字列を UNICODE と ANSI 変換を実行するため、マイクロソフトの機能は、文字列の配列のアドレスを取得するのには使用できません。マイクロソフトを文字列の配列を使用する場合は、一時コピーを ANSI の配列のアドレスが表示されます。詳細については、「テクニカル関数」を参照してください。

StrPtr

Visual Basic で文字列を BSTR に格納されます。String 型の変数で、VarPtr を使用すると、文字列のポインターへのポインターで、BSTR のアドレスになります。文字列バッファーのアドレスを取得するのには StrPtr 関数を使用する必要があります。この関数は、文字列の最初の文字のアドレスを返します。Visual Basic で unicode 文字列が格納されていることに考慮します。

文字列の最初の文字のアドレスを取得するのには、文字列変数、StrPtr 関数に渡します。

使用例:

Dim lngCharAddress as Long
Dim strMyVariable as String
strMyVariable = "Some String"
lngCharAddress = StrPtr(strMyVariable)
				

API 呼び出しに UNIOCODE 文字列へのポインターを渡す必要がある場合、この関数を使用できます。

VarPtrStringArray

テクニカルには文字列の配列のアドレスを取得します。Visual Basic での実行、組み込みの UNICODE と ANSI 変換を回避するのには、宣言、タイプ ライブラリに定義する必要があります。

代わりに、MIDL コンパイラを使用して、次の .odl ファイル ファイルから個人所有のタイプライブラリをコンパイルできます。

Visual Basic 6.0 では、以下の内容をもつ VB6ptrlib.odl という名前のテキスト ファイルを作成します。

#define RTCALL _stdcall
[
uuid(C6799410-4431-11d2-A7F1-00A0C91110C3),
lcid (0), version(6.0), helpstring("VarPtrStringArray Support for VB6")
]
library PtrLib
{
importlib ("stdole2.tlb");
[dllname("msvbvm60.dll")]
module ArrayPtr
   {
   [entry("VarPtr")]
   long RTCALL VarPtrStringArray([in] SAFEARRAY (BSTR) *Ptr);
   }
}
				

Visual Basic 5.0 で、VB5ptrlib.odl 以下のコンテンツで、テキスト ファイルを作成します。

#define RTCALL _stdcall
[
uuid(6E814F00-7439-11D2-98D2-00C04FAD90E7),
lcid (0), version(5.0), helpstring("VarPtrStringArray Support for VB5")
]
library PtrLib
{
importlib ("stdole2.tlb");
[dllname("msvbvm50.dll")]
module ArrayPtr
   {
   [entry("VarPtr")]
   long RTCALL VarPtrStringArray([in] SAFEARRAY (BSTR) *Ptr);
   }
}
				

上記の .odl ファイル ファイル、Visual Basic 6.0 や Visual Basic 5.0 タイプ ライブラリ (.tlb) ファイルを作成するのにと、MIDL コンパイラでコンパイルするのには、次のコマンドラインを使用します。

MIDL/t VB6ptrlib.odlMIDL/t VB5ptrlib.odl

テクニカル プロジェクトで使用するには、作成したタイプ ライブラリへの参照を作成する必要があります。

使用例:

Dim MyArrayOfStrings(2) As String
Dim AddressOfArray As Long
MyArrayOfStrings(0)="AAA"
MyArrayOfStrings(1)="BBB"
AddressOfArray = VarPtrStringArray ( MyArrayOfStrings() )
				

ObjPtr

ObjPtr は、パラメーターとしてオブジェクト変数名を取得し、このオブジェクト変数によって参照されるインターフェイスのアドレスを取得します。

オブジェクトのコレクションを行う必要がある場合はこの関数を使用するシナリオの 1 つです。そのアドレスとしてキーを使用して、オブジェクトのインデックスを作成してコレクションをウォークしてより高速なオブジェクトのアクセスを取得することができますの演算子です。多くの場合、オブジェクトのアドレスをキーとして使用するのには、唯一の確実なことです。

使用例:

objCollection.Add MyObj1, CStr(ObjPtr(MyObj1))
...
objCollection.Remove CStr(ObjPtr(MyObj1))
				

プロパティ

文書番号: 199824 - 最終更新日: 2013年7月1日 - リビジョン: 5.0
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
キーワード:?
kbhowto kbmt KB199824 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:199824
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com