Gewusst wie: Abrufen die Adresse der Variablen in Visual Basic

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 199824 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Es ist selten für Visual Basic-Programmierer niedriger Ebene Informationen auf eine Variable, z. B. seine Speicheradresse erhalten müssen. Es gibt jedoch einige API-Funktionen, die solche Informationen erfordern. Dieser Artikel beschreibt die folgenden VBA-Funktionen, die einen Visual Basic-Programmierer diese Informationen helfen können:

VarPtr - gibt die Adresse einer Variablen zurück.

VarPtrArray - gibt die Adresse eines Arrays zurück.

StrPtr - gibt die Adresse des UNICODE-Zeichenfolgenpuffer zurück.

VarPtrStringArray - gibt die Adresse eines Arrays von Zeichenfolgen.

ObjPtr - gibt den Zeiger auf die Schnittstelle auf die Objektvariable verweist.

Weitere Informationen

Warnung : ein oder mehrere der folgenden Funktionen werden in diesem Artikel; beschriebenen Funktionen VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. Diese Funktionen werden vom Microsoft Software Service nicht unterstützt. Sie sind nicht in der Dokumentation zu Visual Basic dokumentiert und dienen in diesem Knowledge Base-Artikel "wie ist." Microsoft garantiert nicht, dass Sie diese in zukünftigen Versionen von Visual Basic zur Verfügung stehen.

VarPtr

Diese Funktion kann verwendet werden, um die Adresse einer Variablen oder einem Arrayelement zu erhalten. Es nimmt den Namen der Variablen oder Array-Elements als Parameter und gibt die Adresse zurück. Allerdings sollten Sie sich bewusst sein neu, nicht gesperrte dynamische Arrays von Visual Basic reserviert werden möglicherweise können Sie sehr vorsichtig müssen bei Verwendung VarPtr zum Abrufen der Adresse eines Arrayelements.

Das folgende Beispiel ruft die Adresse einer Variablen ab:

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

In diesem Beispiel ruft die Adresse das vierte Element des Array ab:

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

Einschränkungen: Die Funktionen VarPtr-Funktion kann nicht zum Abrufen der Adresse eines Arrays verwendet werden. Weitere Informationen finden Sie unter VarPtrArray-Funktion.

VarPtrArray

Arrays in Visual Basic werden als SAFEARRAYs gespeichert. Um die Adresse der SAFEARRAY-Struktur zu erhalten, müssen Sie die Funktion VarPtrArray verwenden. Im folgenden sind die Visual Basic 5.0 und Visual Basic 6.0-Deklarationen bzw.:

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
				

Die Adresse eines SAFEARRAY zu erhalten, übergeben Sie der SAFEARRAY-Name (einschließlich der Klammer) an die VarPtrArray-Funktion:

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

Einschränkungen: Die VarPtrArray Funktion kann nicht verwendet werden beim Abrufen die Adresse eines Arrays von Zeichenfolgen, da VBA UNICODE-ANSI-Konvertierung für Zeichenfolgen. Wenn Sie VarPtrArray auf ein Array von Zeichenfolgen verwenden, erhalten Sie die Adresse einer temporären ANSI-Kopie des Arrays. Weitere Informationen finden Sie unter VarPtrStringArray-Funktion.

StrPtr

Zeichenfolgen in Visual Basic werden als BSTR des gespeichert. Wenn Sie die Funktionen VarPtr auf eine Variable vom Typ String verwenden, erhalten Sie die Adresse des den BSTR, einen Zeiger auf einen Zeiger der Zeichenfolge. Um die Adresse des Zeichenfolgenpuffers selbst zu erhalten, müssen Sie die StrPtr-Funktion verwenden. Diese Funktion gibt die Adresse des ersten Zeichens der Zeichenfolge zurück. Berücksichtigen Sie, dass Zeichenfolgen als UNICODE in Visual Basic gespeichert werden.

Übergeben Sie an die Funktion StrPtr die Zeichenfolgenvariable, um die Adresse des ersten Zeichens einer Zeichenfolge zu erhalten.

Beispiel:

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

Sie können diese Funktion verwenden, wenn Sie einen Zeiger auf eine Zeichenfolge UNIOCODE ein API-Aufruf übergeben müssen.

VarPtrStringArray

VarPtrStringArray Ruft die Adresse eines Arrays von Zeichenfolgen ab. Um die systeminterne UNICODE-ANSI-Konvertierung von VBA durchgeführte zu vermeiden, hat die Deklaration in einer Bibliothek Typ definiert werden.

Alternativ konnte Sie MIDL-Compiler verwenden, um Ihren eigenen Typ-Bibliothek aus den folgenden .ODL-Dateien kompilieren.

Erstellen Sie für Visual Basic 6.0 eine Textdatei, die mit dem Namen VB6ptrlib.odl mit den folgenden Inhalt:

#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);
   }
}
				

Erstellen Sie für Visual Basic 5.0 eine Textdatei, die mit dem Namen VB5ptrlib.odl mit den folgenden Inhalt:

#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);
   }
}
				

Verwenden Sie die folgenden Befehlszeilen, um die vorhergehenden .ODL-Dateien mit der MIDL-Compiler bzw. erstellen Sie eine Visual Basic 6.0 oder Visual Basic 5.0 Typ Bibliothek (.tlb) Datei zu kompilieren:

/ MIDL t VB6ptrlib.odl MIDL/t VB5ptrlib.odl

Um die VarPtrStringArray-Funktion in Ihrem Projekt verwenden, müssen Sie einen Verweis auf Typ Bibliothek erstellen, die Sie gerade erstellt haben.

Beispiel:

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

ObjPtr

ObjPtr einen Variablennamen-Objekt als Parameter akzeptiert und erhält die Adresse der Schnittstelle auf diese Objektvariable-verweist.

Ein Szenario für die Verwendung dieser Funktion ist müssen Sie eine Auflistung von Objekten. Durch das Objekt mit die Adresse als Schlüssel indizieren, erhalten Sie schnelleren Zugriff auf das Objekt als die Auflistung durchlaufen, und verwenden die is-Operator. In vielen Fällen wird die Adresse eines Objekts nur zuverlässigen, als einen Schlüssel zu verwenden.

Beispiel:

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

Eigenschaften

Artikel-ID: 199824 - Geändert am: Donnerstag, 1. Juli 2004 - Version: 2.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Keywords: 
kbmt kbhowto KB199824 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 199824
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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