Ako získať adresu premenných v jazyku Visual Basic

Preklady článku Preklady článku
ID článku: 199824 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

To je nezvyčajné pre Visual Basic programátor potrebujú získať nízkej úrovni informácie o premennú, napríklad adresy pamäte. Existujú však niektoré API funkcie, ktoré vyžadujú takéto informácie. Tento článok popisuje nasledujúce funkcie jazyka Visual Basic, ktoré môžu pomôcť programu Visual Basic programátor získania tejto informácie:

VarPtr - vráti adresu z premennú.

VarPtrArray - vracia adresu pole.

StrPtr - vracia adresu medzipamäť reťazca UNICODE.

VarPtrStringArray - vracia adresu Pole reťazcov.

ObjPtr - vracia ukazovateľ na rozhranie odkazuje na objekt Premenná.

DALSIE INFORMACIE

UPOZORNENIE: Jednej alebo viacerých z týchto funkcií sú diskutované v tomto článku; VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. Tieto funkcie nie sú podporované technickej podpory spoločnosti Microsoft. Nie sú zdokumentované v dokumentácii programu Visual Basic a sú uvedené v tomto článku databázy Knowledge Base "ako"je. Spoločnosť Microsoft nezaručuje, že bude k dispozícii v ďalších vydaniach jazyka Visual Basic.

VarPtr

Túto funkciu možno získať adresu premenná alebo prvok poľa. Má názov premennej alebo prvok poľa ako parameter a vracia adresu. Avšak, ste mali byť vedomí, že Visual Basic, môžu byť prerozdelené odomknuté dynamické polia, preto musíte byť veľmi opatrní pri použití VarPtr získate adresu prvok poľa.

V nasledujúcom príklade dostane adresu premenná:

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

V tomto príklade dostane adresu štvrtý prvok poľa:

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

Obmedzenia: VarPtr funkcia nemôže byť použitá získate adresu poľa. Ďalšie informácie nájdete v téme funkciu VarPtrArray.

VarPtrArray

Polia v jazyku Visual Basic sa ukladajú ako SAFEARRAYs. Získate adresu SAFEARRAY štruktúru, musíte použiť funkciu VarPtrArray. Sú 5.0 Visual Basic a Visual Basic 6.0 vyhlásení uvedenom poradí:

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ískate adresu SAFEARRAY, prejsť SAFEARRAY meno (vrátane zátvorka) s funkciou VarPtrArray:

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

Obmedzenia: VarPtrArray funkcia, nemôže byť použitá získate adresu Pole reťazcov, pretože Visual Basic robí konverzia UNICODE/ANSI pre reťazce. Ak používate VarPtrArray na pole reťazcov, dostanete adresu dočasnú kópiu ANSI poľa. Ďalšie informácie nájdete v téme funkciu VarPtrStringArray.

StrPtr

Reťazce v jazyku Visual Basic sa ukladajú ako BSTR to. Ak sa použije VarPtr z premennú typu reťazec, dostanete adresu BSTR, čo je ukazovateľ na ukazovateľ reťazca. Získať adresu medzipamäť reťazca, sama, musíte použiť funkciu StrPtr. Táto funkcia vráti adresu prvého znaku reťazca. Brať do úvahy, že struny sú uložené ako UNICODE v jazyku Visual Basic.

Ak chcete získať adresu prvého znaku reťazca, prechádza reťazec premenná na funkciu StrPtr.

Príklad:

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

Túto funkciu môžete použiť, keď potrebujete preniesť smerník na reťazec UNIOCODE na volanie API.

VarPtrStringArray

VarPtrStringArray dostane adresu Pole reťazcov. Aby sa zabránilo vnútornú konverzia UNICODE/ANSI vykonať pomocou jazyka Visual Basic, vyhlásenie musí byť definovaná v knižnici typu.

Alternatívne môžete použiť MIDL kompilátor zostaviť svoj vlastný typ knižnice z nasledovných súborov .odl.

Pre Visual Basic 6.0, vytvoriť textový súbor s názvom VB6ptrlib.odl obsahu nižšie:

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

Pre Visual Basic 5.0, vytvoriť textový súbor s názvom VB5ptrlib.odl obsahu nižšie:

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

Zostaviť predchádzajúceho .odl súbory s MIDL kompilátor vytvoriť Visual Basic 6.0 alebo Visual Basic 5.0 knižnica (.tlb) súbor typu resp., použite nasledovné príkazové riadky:

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

Použiť funkciu VarPtrStringArray v projekte, potrebujete vytvoriť odkaz na knižnicu typov, ktoré ste práve vytvorili.

Príklad:

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

ObjPtr

ObjPtr berie názov premennej objektu ako parameter a získa adresu rozhrania odkazuje tejto premennej objektu.

Jeden zo scenárov pomocou tejto funkcie je, keď potrebujete urobiť kolekcia objektov. Indexovaním objektu pomocou jeho adresy ako kľúč, môžete získať rýchlejší prístup k objektu ako prechádzky zber a použitím je operátor. V mnohých prípadoch adresa objekt je jediné spoľahlivé vec používať ako kľúč.

Príklad:

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

Vlastnosti

ID článku: 199824 - Posledná kontrola: 20. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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
Kľúčové slová: 
kbhowto kbmt KB199824 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:199824

Odošlite odozvu

 

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