Τρόπος λήψης της διεύθυνσης μεταβλητές σε Visual Basic

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 199824 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Είναι ασυνήθιστο για προγραμματιστές Visual Basic για να πρέπει να αποκτήσετε πληροφορίες χαμηλού επιπέδου σε μια μεταβλητή, όπως η διεύθυνση μνήμης. Ωστόσο, υπάρχουν ορισμένες συναρτήσεις API που απαιτούν οι πληροφορίες αυτές. Αυτό το άρθρο περιγράφει τις παρακάτω συναρτήσεις της Visual Basic που μπορεί να βοηθήσει αυτό πληροφορίες προγραμματιστές Visual Basic:

VarPtr - επιστρέφει τη διεύθυνση μιας μεταβλητής.

VarPtrArray - επιστρέφει τη διεύθυνση ενός πίνακα.

StrPtr - επιστρέφει τη διεύθυνση του buffer συμβολοσειράς UNICODE.

VarPtrStringArray - επιστρέφει τη διεύθυνση ενός πίνακα συμβολοσειρών.

ObjPtr - επιστρέφει το δείκτη του ποντικιού στη διασύνδεση που αναφέρεται από ένα αντικείμενο μεταβλητή.

Περισσότερες πληροφορίες

ΠΡΟΕΙΔΟΠΟΊΗΣΗ: Μία ή περισσότερες από τις ακόλουθες λειτουργίες που περιγράφονται σε αυτό το άρθρο VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. Αυτές οι λειτουργίες δεν υποστηρίζονται από την τεχνική υποστήριξη της Microsoft. Δεν τεκμηριώνεται στην τεκμηρίωση της Visual Basic και να παρέχονται σε αυτό το άρθρο της Γνωσιακής βάσης "ως"έχουν. Η Microsoft δεν εγγυάται ότι θα είναι διαθέσιμη σε μελλοντικές εκδόσεις της Visual Basic.

VarPtr

Αυτή η λειτουργία μπορεί να χρησιμοποιηθεί για να λάβετε τη διεύθυνση μια μεταβλητή ή ένα στοιχείο του πίνακα. Λαμβάνει το όνομα της μεταβλητής ή το στοιχείο πίνακα ως παράμετρος και επιστρέφει τη διεύθυνση. Ωστόσο, πρέπει να γνωρίζετε ότι ξεκλειδωθεί δυναμικούς πίνακες μπορεί να αναδιαμενηθούν από τη Visual Basic, έτσι πρέπει να είστε πολύ προσεκτικοί όταν χρησιμοποιείτε το VarPtr για να λάβετε τη διεύθυνση ένα στοιχείο του πίνακα.

Το παράδειγμα που ακολουθεί λαμβάνει τη διεύθυνση μιας μεταβλητής:

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

Στο παράδειγμα αυτό λαμβάνει τη διεύθυνση τέταρτο στοιχείο ενός πίνακα:

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

Περιορισμοί: Η συνάρτηση VarPtr δεν μπορεί να χρησιμοποιηθεί για να λάβετε τη διεύθυνση ενός πίνακα. Για περισσότερες πληροφορίες, ανατρέξτε στη συνάρτηση VarPtrArray.

VarPtrArray

Πίνακες της Visual Basic αποθηκεύονται ως των SAFEARRAYs. Για να λάβετε τη διεύθυνση της δομής του SAFEARRAY, πρέπει να χρησιμοποιήσετε τη συνάρτηση VarPtrArray. Ακολουθούν οι δηλώσεις Visual Basic 5.0 και Visual Basic 6.0 αντίστοιχα:

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 (συμπεριλαμβανομένης της παρένθεση) στη συνάρτηση VarPtrArray:

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

Περιορισμοί: Η συνάρτηση VarPtrArray δεν χρησιμοποιούνται για να λάβετε τη διεύθυνση ένας πίνακας συμβολοσειρών, επειδή η Visual Basic μετατροπή UNICODE/ANSI για συμβολοσειρές. Εάν χρησιμοποιείτε VarPtrArray ένας πίνακας συμβολοσειρών, θα λάβετε τη διεύθυνση ενός προσωρινού αντιγράφου ANSI του πίνακα. Για περισσότερες πληροφορίες, ανατρέξτε στη συνάρτηση VarPtrStringArray.

StrPtr

Οι συμβολοσειρές στη Visual Basic αποθηκεύονται ως του BSTR. Εάν χρησιμοποιείτε το VarPtr σε μια μεταβλητή τύπου String, θα λάβετε τη διεύθυνση BSTR, η οποία είναι ένας δείκτης σε δείκτη της συμβολοσειράς. Για να λάβετε τη διεύθυνση του buffer συμβολοσειράς, η ίδια, πρέπει να χρησιμοποιήσετε τη συνάρτηση StrPtr. Αυτή η συνάρτηση επιστρέφει τη διεύθυνση από τον πρώτο χαρακτήρα της συμβολοσειράς. Λάβετε υπόψη ότι οι συμβολοσειρές αποθηκεύονται ως UNICODE σε Visual Basic.

Για να λάβετε τη διεύθυνση του πρώτου χαρακτήρα μιας ακολουθίας χαρακτήρων, διαβιβάστε μεταβλητή συμβολοσειράς για τη συνάρτηση StrPtr.

Παράδειγμα:

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

Μπορείτε να χρησιμοποιήσετε αυτή τη λειτουργία όταν πρέπει να περάσει ένα δείκτη σε μια συμβολοσειρά UNIOCODE σε μια κλήση API.

VarPtrStringArray

VarPtrStringArray λαμβάνει τη διεύθυνση ενός πίνακα συμβολοσειρών. Για να αποφύγετε την εγγενή μετατροπή UNICODE/ANSI εκτελούνται από τη Visual Basic, η δήλωση έχει οριστεί σε μια βιβλιοθήκη τύπων.

Εναλλακτικά, μπορείτε να χρησιμοποιήσετε το πρόγραμμα μεταγλώττισης 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 με το πρόγραμμα μεταγλώττισης MIDL για να δημιουργήσετε ένα αρχείο βιβλιοθήκης (.tlb) τύπου Visual Basic 6.0 ή Visual Basic 5.0 αντίστοιχα:

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

Για να χρησιμοποιήσετε τη συνάρτηση VarPtrStringArray στο έργο σας, πρέπει να δημιουργήσετε μια αναφορά για τη βιβλιοθήκη τύπων που μόλις δημιουργήσατε.

Παράδειγμα:

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

ObjPtr

ObjPtr λαμβάνει ένα όνομα μεταβλητής αντικειμένου ως παράμετρο και αποκτά τη διεύθυνση της διασύνδεσης που αναφέρεται από αυτή τη μεταβλητή αντικειμένου.

Είναι ένα σενάριο με αυτή τη λειτουργία όταν πρέπει να κάνετε μια συλλογή αντικειμένων. Από το ευρετήριο του αντικειμένου χρησιμοποιώντας τη διεύθυνση ως το κλειδί, μπορείτε να λάβετε ταχύτερη πρόσβαση στο αντικείμενο από βάδισμα στη συλλογή και χρήση του τελεστή είναι. Σε πολλές περιπτώσεις, η διεύθυνση ενός αντικειμένου είναι αξιόπιστο μόνο πράγμα για χρήση ως κλειδί.

Παράδειγμα:

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

Ιδιότητες

Αναγν. άρθρου: 199824 - Τελευταία αναθεώρηση: Παρασκευή, 27 Μαΐου 2011 - Αναθεώρηση: 4.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 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:199824

Αποστολή σχολίων

 

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