Come ottenere l'indirizzo delle variabili in Visual Basic

Traduzione articoli Traduzione articoli
Identificativo articolo: 199824 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

╚ raro che un programmatore di Visual Basic Ŕ necessario ottenere informazioni sul livelli inferiore su una variabile, ad esempio l'indirizzo di memoria. Tuttavia, esistono alcune funzioni di API che richiedono tali informazioni. In questo articolo vengono descritte le funzioni di Visual Basic riportato di seguito pu˛ essere utile ottenere queste informazioni di un programmatore di Visual Basic:

VarPtr - restituisce l'indirizzo di una variabile.

VarPtrArray - restituisce l'indirizzo di una matrice.

StrPtr - restituisce l'indirizzo del buffer di stringa UNICODE.

VarPtrStringArray - restituisce l'indirizzo di una matrice di stringhe.

ObjPtr - restituisce il puntatore a interfaccia a cui fa riferimento un oggetto variabile.

Informazioni

Avviso: uno o pi¨ delle seguenti funzioni sono descritte in questo articolo; VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. Queste funzioni non sono supportate dal servizio supporto tecnico Microsoft. Essi non sono documentate nella documentazione di Visual Basic e vengono forniti in questo articolo della Knowledge Base "cosý"com'Ŕ. Microsoft non garantisce che siano disponibili nelle versioni future di Visual Basic.

VarPtr

Questa funzione pu˛ essere utilizzata per ottenere l'indirizzo di una variabile o un elemento della matrice. Accetta il nome della variabile o un elemento della matrice come parametro e restituisce l'indirizzo. Tuttavia, deve essere a conoscenza che sbloccato matrici dinamiche possono essere ridistribuite dalle Visual Basic, pertanto Ŕ necessario prestare molta attenzione quando si utilizza VarPtr per ottenere l'indirizzo di un elemento della matrice.

L'esempio seguente ottiene l'indirizzo di una variabile:

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

Questo esempio viene ottenuto l'indirizzo del quarto elemento della matrice:

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

Limitazioni: La funzione di VarPtr non pu˛ essere utilizzata per ottenere l'indirizzo di una matrice. Per ulteriori informazioni, vedere la funzione VarPtrArray.

VarPtrArray

Le matrici in Visual Basic vengono memorizzate come SAFEARRAY. Per ottenere l'indirizzo della struttura di SAFEARRAY, Ŕ necessario utilizzare la funzione VarPtrArray. Di seguito sono le dichiarazioni di Visual Basic 5.0 e Visual Basic 6.0 rispettivamente:

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
				

Per ottenere l'indirizzo di un SAFEARRAY, passare il nome SAFEARRAY (comprese le parentesi) alla funzione VarPtrArray:

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

Limitazioni: La funzione VarPtrArray non Ŕ utilizzata per ottenere l'indirizzo di una matrice di stringhe, perchÚ Visual Basic esegue la conversione UNICODE/ANSI per le stringhe. Se si utilizza VarPtrArray in una matrice di stringhe, si otterrÓ l'indirizzo di una copia temporanea di ANSI della matrice. Per ulteriori informazioni, vedere la funzione VarPtrStringArray.

StrPtr

In Visual Basic sono archiviate come del BSTR. Se si utilizza il VarPtr su una variabile di tipo stringa, si otterrÓ l'indirizzo del BSTR, vale a dire un puntatore a un puntatore di stringa. Per ottenere l'indirizzo del buffer di stringa, Ŕ necessario utilizzare la funzione StrPtr. Questa funzione restituisce l'indirizzo del primo carattere della stringa. Prendere in considerazione che le stringhe sono in formato UNICODE in Visual Basic.

Per ottenere l'indirizzo del primo carattere di una stringa, passare la variabile di stringa alla funzione StrPtr.

Esempio:

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

╚ possibile utilizzare questa funzione quando Ŕ necessario passare un puntatore a una stringa UNIOCODE da una chiamata API.

VarPtrStringArray

VarPtrStringArray Ottiene l'indirizzo di una matrice di stringhe. Per evitare la conversione UNICODE/ANSI intrinseca eseguita da Visual Basic, la dichiarazione deve essere definito in una libreria dei tipi.

In alternativa, Ŕ possibile utilizzare il compilatore MIDL per compilare la propria libreria dei tipi dai seguenti file ODL.

Per Visual Basic 6.0, creare un file di testo denominato VB6ptrlib.odl con le informazioni sottostanti:

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

Per Visual Basic 5.0, creare un file di testo denominato VB5ptrlib.odl con le informazioni sottostanti:

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

Utilizzare le seguenti righe di comando per compilare i file ODL indicati in precedenza con il compilatore MIDL per creare un file di tipo libreria (tlb) di Visual Basic 6.0 o Visual Basic 5.0 rispettivamente:

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

Per utilizzare la funzione VarPtrStringArray nel progetto, Ŕ necessario creare un riferimento alla libreria dei tipi che avete appena creato.

Esempio:

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

ObjPtr

ObjPtr accetta un nome di variabile oggetto come parametro e ottiene l'indirizzo dell'interfaccia a cui fa riferimento questa variabile di oggetto.

Uno scenario di utilizzo di questa funzione Ŕ quando Ŕ necessario eseguire un insieme di oggetti. Indicizzando l'oggetto utilizzando il relativo indirizzo come chiave, Ŕ possibile ottenere un accesso pi¨ rapido per l'oggetto nell'insieme e dell'utilizzo dell'operatore. In molti casi, l'indirizzo di un oggetto Ŕ la cosa solo affidabile da utilizzare come chiave.

Esempio:

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

ProprietÓ

Identificativo articolo: 199824 - Ultima modifica: giovedý 29 novembre 2012 - Revisione: 4.0
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi:á
kbhowto kbmt KB199824 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 199824
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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