วิธีการรับที่อยู่ของตัวแปรใน Visual Basic

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 199824 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

ลประเภทนี้สำหรับโปรแกรมเมอร์ Visual Basic เพื่อต้องการได้รับข้อมูลที่ระดับต่ำบนตัวแปร เช่นที่อยู่ของหน่วยความจำได้ อย่างไรก็ตาม ไม่มีบางฟังก์ชัน API ที่ต้องใช้ข้อมูลเช่น บทความนี้อธิบายถึงฟังก์ชัน Visual Basic ดังต่อไปนี้ที่อาจช่วยให้โปรแกรมเมอร์ Visual Basic เพื่อรับทราบข้อมูลนี้:

VarPtr - ส่งกลับค่าที่อยู่ของตัวแปร

VarPtrArray - ที่อยู่ของอาร์เรย์ที่ส่งกลับค่า

StrPtr - ส่งกลับค่าที่อยู่ของบัฟเฟอร์ของสายอักขระ UNICODE

VarPtrStringArray - ส่งกลับค่าอาร์เรย์ของสายอักขระอยู่

ObjPtr - ส่งกลับตัวชี้ไปยังอินเทอร์เฟซถูกอ้างอิง โดยวัตถุ ตัวแปร

ข้อมูลเพิ่มเติม

คำเตือน: ฟังก์ชันต่อไปนี้อย่างน้อยหนึ่งจะถูกกล่าวถึงในบทความนี้ ObjPtr VarPtrStringArray, StrPtr, VarPtr, VarPtrArray, ฟังก์ชันเหล่านี้ไม่ได้รับการสนับสนุน โดยการสนับสนุนทางเทคนิคของ Microsoft พวกเขาไม่ได้รายละเอียดในเอกสารคู่มือ Visual Basic และให้ไว้ในบทความ Knowledge Base นี้ "ตามที่เป็นอยู่" 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 ต่อไปนี้จะประกาศ 5.0 Visual Basic และ 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 ที่ในตัวแปรชนิดสตริง คุณจะได้รับข้อความแสดงที่อยู่ของ BSTR ซึ่งเป็นตัวชี้เป็นชี้ของสายอักขระ เมื่อต้องการรับที่อยู่ของบัฟเฟอร์สตริงเอง คุณจำเป็นต้องใช้ฟังก์ชัน 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 การสร้าง Visual Basic 6.0 หรือ Visual Basic 5.0 ชนิดไลบรารี (.tlb) แฟ้มตามลำดับ:

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 ชื่อตัวแปรวัตถุเป็นพารามิเตอร์ที่ใช้เวลา และได้รับที่อยู่ของอินเทอร์เฟซถูกอ้างอิง โดยตัวแปรวัตถุนี้

สถานการณ์สมมติที่หนึ่งของการใช้ฟังก์ชันนี้ได้เมื่อคุณจำเป็นต้องทำการเรียกเก็บเงินของวัตถุ โดยการทำดัชนีวัตถุใช้อยู่นั้นเป็นคีย์ คุณสามารถเข้าถึงวัตถุเร็วกว่า walking คอลเลกชัน และการใช้เป็นผู้ให้บริการได้ ในหลายกรณี ที่อยู่ของวัตถุเป็นสิ่งที่เชื่อถือได้เท่านั้นจะใช้เป็นคีย์

ตัวอย่าง:

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

คุณสมบัติ

หมายเลขบทความ (Article ID): 199824 - รีวิวครั้งสุดท้าย: 28 มกราคม 2554 - Revision: 5.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
Keywords: 
kbhowto kbmt KB199824 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ 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