Jak získat adresu proměnné v jazyce Visual Basic

Překlady článku Překlady článku
ID článku: 199824 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Neobvyklé pro programátor Visual Basic musí získat informace o nízké úrovni proměnné, jako jsou například adresy paměti. Existují však některé funkce rozhraní API, které vyžadují tyto informace. Tento článek popisuje následující funkce jazyka Visual Basic, které vám mohou pomoci získat tyto informace programátoři jazyka Visual Basic:

VarPtr - vrátí adresu proměnné.

VarPtrArray - vrátí adresu pole.

StrPtr - vrátí adresu vyrovnávací paměti pro řetězec UNICODE.

VarPtrStringArray - vrátí adresu pole řetězců.

ObjPtr - vrátí ukazatel rozhraní odkazuje na objekt Proměnná.

Další informace

Upozornění: jedna nebo více z následujících funkcí jsou uvedeny v tomto článku; VarPtr, VarPtrArray, VarPtrStringArray StrPtr, ObjPtr. Tyto funkce nejsou podporovány odbornou pomoc společnosti Microsoft. Tyto nejsou popsány v dokumentaci k aplikaci Visual Basic a jsou k dispozici v tomto článku znalostní báze Knowledge Base tak, jak jsou." Společnost Microsoft nezaručuje, že bude k dispozici v příštích verzích jazyka Visual Basic.

VarPtr

Tuto funkci lze použít k získání adresy proměnné nebo prvku pole. Přebírá název proměnné nebo prvek pole jako parametr a vrátí adresu. Nicméně byste měli znát, odemknout dynamická pole může být přerozděleny pomocí jazyka Visual Basic, musíte být velmi opatrní při použití VarPtr získává adresu prvku pole.

Následující příklad načte adresu proměnné:

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

Tento příklad načte adresu čtvrtým prvkem pole:

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

Omezení: Funkce VarPtr nelze získat adresu matici. Další informace naleznete v tématu funkce VarPtrArray.

VarPtrArray

Polí v jazyce Visual Basic, jsou ukládány jako třídu SAFEARRAYs. Získat adresu struktura SAFEARRAY, musíte použít funkci VarPtrArray. Následuje deklarace jazyka Visual Basic 5.0 a Visual Basic 6.0 v uvedeném pořadí:

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
				

Získat adresu SAFEARRAY předáte SAFEARRAY název (včetně v závorkách) VarPtrArray funkci:

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

Omezení: Funkci VarPtrArray nelze získat adresu pole řetězců, protože Visual Basic se převodu UNICODE/ANSI pro řetězce. Používáte-li na pole řetězců VarPtrArray, obdržíte adresu dočasnou kopii pole ANSI. Další informace naleznete v tématu funkce VarPtrStringArray.

StrPtr

Řetězce v jazyce Visual Basic, jsou ukládány jako na BSTR. Pokud používáte VarPtr v proměnné typu řetězec, získáváte adresy BSTR, což je ukazatel na ukazatel řetězec. Chcete-li získat adresu vlastní vyrovnávací paměť pro řetězec, použijte funkci StrPtr. Tato funkce vrací adresu první znak řetězce. Vzít v úvahu, že řetězce jsou uloženy ve formátu UNICODE v jazyce Visual Basic.

Chcete-li získat adresu první znak řetězce, předáte funkci StrPtr řetězcové proměnné.

Příklad:

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

Tuto funkci můžete použít, pokud potřebujete předat ukazatel na řetězec UNIOCODE k volání rozhraní API.

VarPtrStringArray

VarPtrStringArray získává adresu z pole řetězců. Aby nedošlo k vnitřní převodu UNICODE/ANSI provést pomocí jazyka Visual Basic, prohlášení musí být definována v knihovně typů.

Alternativně můžete použít MIDL kompilátoru kompilace typu knihovny z následující soubory .odl.

Visual Basic 6.0 vytvořte textový soubor s názvem VB6ptrlib.odl s následující obsah:

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

Pro Visual Basic 5.0 vytvořte textový soubor s názvem VB5ptrlib.odl s následující obsah:

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

Kompilovat předchozí soubory .odl s kompilátorem MIDL respektive vytvořit soubor typu knihovny souboru(.tlb) Visual Basic 6.0 nebo Visual Basic 5.0, použijte na příkazovém řádku následující:

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

Chcete-li použít funkci VarPtrStringArray v projektu, je nutné vytvořit odkaz na typ knihovny, kterou jste právě vytvořili.

Příklad:

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

ObjPtr

ObjPtr přebírá název proměnné v objektu jako parametr a získá adresu rozhraní odkazuje tato proměnná objektu.

Jeden z důvodů pro použití této funkce je, když je třeba provést kolekce objektů. Indexování objekt pomocí jeho adresy jako klíč, lze získat rychlejší přístup k objektu než procházení kolekce pomocí operátor. V mnoha případech je adresa objektu pouze spolehlivé věc, kterou chcete použít jako klíč.

Příklad:

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

Vlastnosti

ID článku: 199824 - Poslední aktualizace: 1. července 2013 - Revize: 3.0
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbhowto kbmt KB199824 KbMtcs
Strojově přeložený článek
DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.
Projděte si také anglickou verzi článku: 199824

Dejte nám zpětnou vazbu

 

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