Nasıl yapılır: adresini değişkenleri Visual Basic'te Al...

Makale çevirileri Makale çevirileri
Makale numarası: 199824 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu işlem için düşük düzey bellek adresini gibi bir değişken bilgi elde etmeniz bir Visual Basic Programcı sık olur. Ancak, bu bilgilere gerek duyan bazı API işlevleri vardır. Bu makalede, bu bilgileri edinmesi bir Visual Basic Programcı yardımcı olabilecek aşağıdaki Visual Basic işlevleri:

VarPtr-, değişken adresini döndürür.

VarPtrArray - dizi adresini döndürür.

StrPtr - UNICODE dize arabelleğinde adresini döndürür.

VarPtrStringArray - dize dizisi adresini döndürür.

Bir nesne değişkeni tarafından başvurulan bir arabirim için işaretçiyi ObjPtr - verir.

Daha fazla bilgi

UYARı: bir veya daha fazlası aşağıdaki işlevleri; bu makalede açıklanan VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. Bu işlevler, Microsoft Teknik destek tarafından desteklenmiyor. Visual Basic belgelerindeki belgelenmemiştir ve sağlanan bu Knowledge Base makalesinde "olduğu gibi." Microsoft, Visual Basic gelecekteki sürümlerde kullanılabilir olduğunu garanti etmez.

VarPtr

Bu işlev bir değişken veya bir dizi öğesinin adresini almak için kullanılabilir. Bu işlem, değişken adını veya dizi öğesinin parametresi olarak alır ve adresini döndürür. Ancak, bir <a0>dizi</a0> öğesinin adresini almak için VarPtr kullanırken çok dikkatli olmalısınız; böylece kilidi dinamik Arrays Visual Basic tarafından yeniden olduğunu bilmeniz gerekir.

Aşağıdaki örnek, bir değişkenin adresi alır:

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

Bu örnek, dizinin dördüncü öğe adresini alır:

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

Kısıtlamalar: VarPtr işlevi bir dizi adresini almak için kullanılamaz. Daha fazla bilgi için bkz: VarPtrArray işlevi.

VarPtrArray

Visual Basic'te bir dizi SAFEARRAYs depolanır. SAFEARRAY yapısının adresini almak için <a0></a0>, VarPtrArray işlevini kullanmanız gerekir. Visual Basic 5.0 ve Visual Basic 6. 0'ın bildirimleri sırasıyla şunlardır:

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
				

Bir SAFEARRAY adresini almak için <a0></a0>, VarPtrArray işlevine (parantez dahil) SAFEARRAY adı geçir:

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

Kısıtlamalar: çünkü UNıCODE/ANSı dönüştürme dizeleri için Visual Basic yapar VarPtrArray işlevi, bir dize dizisi adresini almak için kullanılamaz. Bir dize dizisi VarPtrArray kullanırsanız, dizinin geçici bir ANSI kopyasını adresini alır. Daha fazla bilgi için bkz: VarPtrStringArray işlevi.

StrPtr

Visual Basic'te dizeleri BSTR kişinin depolanır. Bir değişkeni dize türünde VarPtr kullanırsanız, dize işaretçisi bir işaretçi olan BSTR, adresini alır. Dize arabelleğinde adresini almak için <a0></a0>, StrPtr işlevini kullanmanız gerekir. Bu işlev, dizenin ilk karakterin adresini döndürür. Visual Basic'te UNICODE olarak depolanan dizeler dikkate alın.

Ilk karakter dizesinin adresini almak için <a0></a0>, dize değişkeni, StrPtr işlevine geçirir.

ÖRNEK:

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

Bir API çağrısı UNIOCODE dize işaretçisi aktarmak istediğinizde bu işlevi kullanabilirsiniz.

VarPtrStringArray

VarPtrStringArray bir dize dizisi adresini alır. Visual Basic tarafından gerçekleştirilen bir iç UNıCODE/ANSı dönüştürme önlemek için <a0></a0>, bir tür kitaplığında tanımlanması bildirim yok.

Alternatif olarak, aşağıdaki dosyaları .odl kendi bir tür kitaplığından derleme için MIDL derleyici kullanabilirsiniz.

Visual Basic 6.0 için aşağıdaki içeriğe sahip VB6ptrlib.odl adlı bir metin dosyası oluşturun:

#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 için aşağıdaki içeriğe sahip VB5ptrlib.odl adlı bir metin dosyası oluşturun:

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

Önceki .odl dosyalarını, sırasıyla, bir Visual Basic 6.0 veya Visual Basic 5.0 türü kitaplığı (.tlb) dosyası oluşturmak için MIDL Derleyici ile aşağıdaki komut satırlarını kullanın:

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

Projenizde VarPtrStringArray işlevini kullanmak için oluşturduğunuz türündeki kitaplığa bir başvuru oluşturmanız gerekir.

ÖRNEK:

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

ObjPtr

ObjPtr parametre olarak bir nesne değişkeni adı alıp, bu nesne değişkeni tarafından başvurulan arabirimin adresini alır.

Nesnelerin bir birleşimini yapmak istediğinizde bu işlevi kullanarak, bir senaryodur. Nesnenin anahtar olarak adresini kullanarak dizin oluşturma, koleksiyon izlenecek ve kullanarak daha hızlı erişim elde edebilirsiniz işletmen iş. Çoğu durumda bir nesnenin anahtar olarak kullanmak için yalnızca güvenilir bir şey adresidir.

ÖRNEK:

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

Özellikler

Makale numarası: 199824 - Last Review: 1 Temmuz 2004 Perşembe - Gözden geçirme: 2.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Anahtar Kelimeler: 
kbmt kbhowto KB199824 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:199824

Geri Bildirim Ver

 

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