Làm th? nào đ? có đư?c đ?a ch? c?a bi?n trong Visual Basic

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 199824 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Nó là ph? bi?n cho m?t Visual Basic l?p tr?nh viên c?n ph?i có đư?c th?p thông tin c?p ngày m?t bi?n, ch?ng h?n như đ?a ch? b? nh? c?a nó. Tuy nhiên, có m?t s? ch?c năng API yêu c?u thông tin như v?y. Bài vi?t này mô t? các ch?c năng Visual Basic sau đây có th? giúp m?t l?p tr?nh viên Visual Basic có đư?c thông tin này:

VarPtr - tr? v? đ?a ch? c?a m?t bi?n.

VarPtrArray - tr? v? đ?a ch? c?a m?t m?ng.

StrPtr - tr? v? đ?a ch? c?a b? đ?m chu?i UNICODE.

VarPtrStringArray - tr? v? đ?a ch? c?a m?t m?ng c?a chu?i.

ObjPtr - tr? v? con tr? đ?n giao di?n đư?c tham chi?u b?i m?t đ?i tư?ng bi?n.

THÔNG TIN THÊM

C?NH BÁO: M?t ho?c nhi?u các ch?c năng sau đây s? đư?c th?o lu?n trong bài vi?t này; VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. Các ch?c năng này không đư?c h? tr? b?i Microsoft h? tr? k? thu?t. H? không đư?c di?n t? trong tài li?u Visual Basic và đư?c cung c?p trong bài vi?t cơ s? ki?n th?c này "như." Microsoft không đ?m b?o r?ng h? s? có s?n trong b?n phát hành tương lai c?a Visual Basic.

VarPtr

Ch?c năng này có th? đư?c s? d?ng đ? có đư?c đ?a ch? c?a m?t bi?n ho?c m?t ph?n t? m?ng. Đô th? này có tên bi?n ho?c các ph?n t? m?ng như tham s? và tr? v? đ?a ch?. Tuy nhiên, b?n nên bi?t r?ng, m? khóa năng đ?ng m?ng có th? đư?c reallocated b?i Visual Basic, v? v?y b?n ph?i r?t c?n th?n khi b?n s? d?ng VarPtr đ? có đư?c đ?a ch? c?a m?t ph?n t? m?ng.

Ví d? sau đư?c đ?a ch? c?a m?t bi?n:

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

Ví d? này đư?c đ?a ch? c?a các y?u t? th? tư c?a m?t m?ng:

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

H?n ch?: Ch?c năng VarPtr không th? đư?c s? d?ng đ? có đư?c đ?a ch? c?a m?t m?ng. Đ? bi?t thêm thông tin, h?y xem ch?c năng VarPtrArray.

VarPtrArray

M?ng trong Visual Basic đư?c lưu tr? như SAFEARRAYs. Đ? có đư?c đ?a ch? c?a c?u trúc SAFEARRAY, b?n c?n ph?i s? d?ng các ch?c năng VarPtrArray. Sau đây là các tuyên b? Visual Basic 5.0 và Visual Basic 6.0 tương ?ng:

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
				

Đ? có đư?c đ?a ch? c?a m?t SAFEARRAY, vư?t qua tên SAFEARRAY (bao g?m c? ngo?c) cho các ch?c năng VarPtrArray:

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

H?n ch?: Ch?c năng VarPtrArray không th? đư?c s? d?ng đ? có đư?c đ?a ch? c?a m?t m?ng c?a chu?i, b?i v? Visual Basic không chuy?n đ?i UNICODE/ANSI cho chu?i. N?u b?n s? d?ng VarPtrArray trên m?t m?ng c?a chu?i, b?n s? có đư?c đ?a ch? c?a m?t b?n sao ANSI t?m th?i c?a m?ng. Đ? bi?t thêm thông tin, h?y xem ch?c năng VarPtrStringArray.

StrPtr

B? dây Visual Basic đư?c lưu tr? như là BSTR c?a. N?u b?n s? d?ng VarPtr trên m?t bi?n lo?i chu?i, b?n s? nh?n đư?c đ?a ch? c?a BSTR, mà là m?t con tr? ch? t?i m?t con tr? c?a chu?i. Đ? có đư?c đ?a ch? c?a b? đ?m chu?i chính nó, b?n c?n ph?i s? d?ng các ch?c năng StrPtr. Ch?c năng này tr? v? đ?a ch? c?a các k? t? đ?u tiên c?a chu?i. Đưa vào tài kho?n chu?i đư?c lưu tr? như UNICODE trong Visual Basic.

Đ? có đư?c đ?a ch? c?a các k? t? đ?u tiên c?a m?t chu?i, vư?t qua bi?n chu?i đ? ch?c năng StrPtr.

Ví d?:

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

B?n có th? s? d?ng ch?c năng này khi b?n c?n ph?i vư?t qua m?t con tr? đ?n m?t chu?i UNIOCODE đ?n m?t cu?c g?i API.

VarPtrStringArray

VarPtrStringArray đư?c đ?a ch? c?a m?t m?ng c?a chu?i. Đ? tránh vi?c chuy?n đ?i UNICODE/ANSI n?i t?i c?a Visual Basic, tuyên b? đ? đư?c đ?nh ngh?a trong m?t thư vi?n ki?u.

Ngoài ra, b?n có th? s? d?ng tr?nh biên d?ch MIDL đ? biên d?ch thư vi?n lo?i riêng c?a b?n t? các t?p tin .odl sau.

Cho Visual Basic 6.0, t?o m?t t?p tin văn b?n có tên VB6ptrlib.odl v?i n?i dung dư?i đây:

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

Cho Visual Basic 5.0, t?o m?t t?p tin văn b?n có tên VB5ptrlib.odl v?i n?i dung dư?i đây:

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

S? d?ng d?ng l?nh sau đ? biên d?ch các t?p tin .odl trư?c v?i tr?nh biên d?ch MIDL đ? t?o ra m?t Visual Basic 6.0 hay Visual Basic 5.0 lo?i thư vi?n (.tlb) đánh d?u tương ?ng:

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

S? d?ng ch?c năng VarPtrStringArray trong d? án c?a b?n, b?n c?n ph?i t?o ra m?t tham chi?u đ?n thư vi?n ki?u b?n v?a t?o ra.

Ví d?:

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

ObjPtr

ObjPtr m?t m?t tên bi?n đ?i tư?ng như m?t tham s? và l?y đư?c đ?a ch? c?a giao di?n đư?c tham chi?u b?i bi?n đ?i tư?ng này.

M?t k?ch b?n c?a vi?c s? d?ng ch?c năng này là khi b?n c?n ph?i làm m?t b? sưu t?p c?a các đ?i tư?ng. B?i ch? m?c đ?i tư?ng b?ng cách s? d?ng đ?a ch? c?a nó là ch?a khóa, b?n có th? truy nhanh hơn đ?i tư?ng hơn so v?i đi b? b? sưu t?p và s? d?ng các là nhà đi?u hành. Trong nhi?u trư?ng h?p, đ?a ch? c?a m?t đ?i tư?ng là nh?ng đi?u ch? đáng tin c?y đ? s? d?ng như m?t ch?a khóa.

Ví d?:

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

Thu?c tính

ID c?a bài: 199824 - L?n xem xét sau cùng: 20 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • 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
T? khóa: 
kbhowto kbmt KB199824 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:199824

Cung cấp Phản hồi

 

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