ขณะนี้คุณออฟไลน์อยู่ กำลังรออินเทอร์เน็ตเพื่อเชื่อมต่ออีกครั้ง

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

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

ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้: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 LongDim dblMyVariable as DoublelngVariableAddress = VarPtr(dblMyVariable)				

ตัวอย่างนี้ได้รับที่อยู่ขององค์ประกอบที่สี่ของอาร์เรย์:

Dim lngElementAddress as LongDim lngArrayOfLongs(9) as Long' following will get address of 4th elementlngElementAddress = 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 LongDeclare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" _(Var() as Any) As Long				

การรับที่อยู่ของ SAFEARRAY ผ่านชื่อ SAFEARRAY (รวมถึงการใส่วงเล็บ) ไปยังฟังก์ชัน VarPtrArray:

Dim lngSafeArrayAddress as LongDim lngArrayOfLongs(9) as LonglngSafeArrayAddress = VarPtrArray(lngArrayOfLongs())				

ข้อจำกัด: ฟังก์ชัน VarPtrArray ไม่สามารถใช้เพื่อรับที่อยู่ของอาร์เรย์ของสตริงการ เนื่องจาก Visual Basic ไม่แปลงสายอักขระ UNICODE/ANSI ถ้าคุณใช้ VarPtrArray ในอาร์เรย์ของสตริงการ คุณจะได้รับข้อความแสดงที่อยู่ของ ANSI สำเนาชั่วคราวของอาร์เรย์ สำหรับข้อมูลเพิ่มเติม ดูฟังก์ชัน VarPtrStringArray

StrPtr

สายอักขระใน Visual Basic จะถูกเก็บไว้เป็นของ BSTR ถ้าคุณใช้ VarPtr ที่ในตัวแปรชนิดสตริง คุณจะได้รับข้อความแสดงที่อยู่ของ BSTR ซึ่งเป็นตัวชี้เป็นชี้ของสายอักขระ เมื่อต้องการรับที่อยู่ของบัฟเฟอร์สตริงเอง คุณจำเป็นต้องใช้ฟังก์ชัน StrPtr ฟังก์ชันนี้ส่งกลับค่าที่อยู่ของอักขระตัวแรกในสายอักขระ นำเข้าบัญชีว่า สายอักขระจะถูกเก็บไว้เป็น UNICODE ใน Visual Basic

เพื่อรับที่อยู่ของอักขระแรกของสตริงที่ ผ่านสายอักขระตัวแปรไปยังฟังก์ชัน StrPtr

ตัวอย่าง:

Dim lngCharAddress as LongDim strMyVariable as StringstrMyVariable = "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 StringDim AddressOfArray As LongMyArrayOfStrings(0)="AAA"MyArrayOfStrings(1)="BBB"AddressOfArray = VarPtrStringArray ( MyArrayOfStrings() )				

ObjPtr

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

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

ตัวอย่าง:

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

คำเตือน: บทความนี้ได้รับการแปลโดยอัตโนมัติ

คุณสมบัติ

รหัสบทความ: 199824 - การตรวจสอบครั้งสุดท้าย: 12/05/2015 10:25:43 - ฉบับแก้ไข: 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

  • kbnosurvey kbarchive kbhowto kbmt KB199824 KbMtth
คำติชม