Bagaimana untuk mendapatkan alamat variabel dalam Visual Basic

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 199824 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Hal ini biasa bagi seorang programmer Visual Basic perlu untuk memperoleh informasi tingkat rendah pada variabel, seperti alamat memori. Namun, ada beberapa fungsi API yang memerlukan informasi tersebut. Artikel ini menjelaskan fungsi Visual Basic berikut yang dapat membantu seorang programmer Visual Basic yang memperoleh informasi ini:

VarPtr - kembali alamat variabel.

VarPtrArray - kembali alamat array.

StrPtr - kembali alamat UNICODE string buffer.

VarPtrStringArray - kembali alamat sebuah array dari string.

ObjPtr - kembali pointer ke antarmuka yang direferensikan oleh objek variabel.

INFORMASI LEBIH LANJUT

PERINGATAN: Satu atau lebih dari fungsi-fungsi berikut yang dibahas dalam artikel ini; VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. Fungsi-fungsi ini tidak didukung oleh Microsoft dukungan teknis. Mereka tidak didokumentasikan dalam dokumentasi Visual Basic dan disediakan dalam artikel Basis Pengetahuan ini "sebagaimana"adanya. Microsoft tidak menjamin bahwa mereka akan tersedia di masa depan pers Visual Basic.

VarPtr

Fungsi ini dapat digunakan untuk mendapatkan alamat variabel atau elemen array. Dibutuhkan nama variabel atau elemen array sebagai parameter dan kembali alamat. Namun, Anda harus menyadari dialokasikan bahwa membuka dinamis array mungkin akan kembali oleh Visual Basic, jadi Anda harus sangat berhati-hati ketika Anda menggunakan VarPtr untuk mendapatkan alamat elemen array.

Contoh berikut akan alamat variabel:

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

Contoh ini membuat alamat keempat elemen array:

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

Keterbatasan: Fungsi VarPtr tidak dapat digunakan untuk mendapatkan alamat array. Untuk informasi lebih lanjut, lihat VarPtrArray fungsi.

VarPtrArray

Array dalam Visual Basic yang disimpan sebagai SAFEARRAYs. Untuk mendapatkan alamat struktur SAFEARRAY, Anda perlu menggunakan fungsi VarPtrArray. Berikut ini adalah pernyataan Visual Basic 5.0 dan Visual Basic 6.0 masing-masing:

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
				

Untuk mendapatkan alamat SAFEARRAY, melewati nama SAFEARRAY (termasuk tanda kurung) untuk VarPtrArray fungsi:

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

Keterbatasan: Fungsi VarPtrArray tidak dapat digunakan untuk mendapatkan alamat sebuah array dari string, karena Visual Basic tidak UNICODE/ANSI konversi untuk string. Jika Anda menggunakan VarPtrArray pada sebuah array dari string, Anda akan mendapatkan alamat salinan ANSI sementara array. Untuk informasi lebih lanjut, lihat VarPtrStringArray fungsi.

StrPtr

String dalam Visual Basic disimpan sebagai BSTR's. Jika Anda menggunakan VarPtr pada variabel tipe String, Anda akan mendapatkan alamat BSTR, yang merupakan pointer ke penunjuk string. Untuk mendapatkan alamat buffer string itu sendiri, Anda perlu menggunakan fungsi StrPtr. Fungsi ini mengembalikan alamat karakter pertama dari string. Memperhitungkan bahwa string disimpan sebagai UNICODE dalam Visual Basic.

Untuk mendapatkan alamat karakter pertama dari String, lulus variabel String ke fungsi StrPtr.

Contoh:

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

Anda dapat menggunakan fungsi ini ketika Anda harus lulus sebuah pointer ke string UNIOCODE untuk panggilan API.

VarPtrStringArray

VarPtrStringArray mendapatkan alamat sebuah array dari string. Untuk menghindari konversi UNICODE/ANSI intrinsik yang dilakukan oleh Visual Basic, Deklarasi harus didefinisikan dalam perpustakaan jenis.

Atau, Anda dapat menggunakan MIDL kompiler untuk mengkompilasi Anda sendiri perpustakaan jenis dari berkas .odl berikut.

Untuk Visual Basic 6.0, menciptakan sebuah file teks yang bernama VB6ptrlib.odl dengan konten di bawah ini:

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

Untuk Visual Basic 5.0, menciptakan sebuah file teks yang bernama VB5ptrlib.odl dengan konten di bawah ini:

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

Menggunakan baris perintah berikut untuk mengkompilasi file .odl sebelumnya dengan kompiler MIDL untuk membuat Visual Basic 6.0 atau Visual Basic 5.0 jenis file library (.tlb) masing-masing:

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

Untuk menggunakan fungsi VarPtrStringArray dalam proyek Anda, Anda perlu membuat referensi ke perpustakaan jenis yang baru saja Anda buat.

Contoh:

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

ObjPtr

ObjPtr mengambil nama variabel objek sebagai parameter dan memperoleh alamat antarmuka yang direferensikan oleh variabel objek ini.

Satu skenario menggunakan fungsi ini adalah ketika Anda perlu untuk melakukan Koleksi objek. Oleh pengindeksan objek yang menggunakan alamat yang sebagai kunci, Anda bisa mendapatkan akses cepat ke objek daripada berjalan koleksi dan menggunakan operator. Dalam banyak kasus, alamat objek adalah hal yang hanya dapat diandalkan untuk digunakan sebagai kunci.

Contoh:

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

Properti

ID Artikel: 199824 - Kajian Terakhir: 19 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
Kata kunci: 
kbhowto kbmt KB199824 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:199824

Berikan Masukan

 

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