อ่าน 2 นาที
ประเภทตัวแปร (COM)
Variant เป็น ชนิดข้อมูล ในภาษาโปรแกรมบางภาษา โดยเฉพาะ Visual Basic , OCaml , [ 1 ] Delphi และ C++ เมื่อใช้ Component Object Model เป็นการนำ แนวคิดที่มีชื่อเดียวกันมา ใช้ ใน...
ประเภทตัวแปร (COM)
Variantเป็นชนิดข้อมูลในภาษาโปรแกรมบางภาษา โดยเฉพาะVisual Basic , OCaml , [ 1 ] DelphiและC++เมื่อใช้Component Object Modelเป็นการนำแนวคิดที่มีชื่อเดียวกันมา ใช้ ในวิทยาศาสตร์คอมพิวเตอร์
ใน Visual Basic (และVisual Basic for Applications ) ชนิดข้อมูล Variant เป็นยูเนียนแบบแท็กที่สามารถใช้แทนชนิดข้อมูลอื่นๆ ได้ (เช่นจำนวนเต็ม , ทศนิยม , ความแม่นยำ เดี่ยวและคู่ , อ็อบเจ็กต์ฯลฯ) ยกเว้นชนิดข้อมูลสตริงที่มีความยาวคงที่ ใน Visual Basic ตัวแปรใดๆ ที่ไม่ได้ประกาศอย่างชัดเจน หรือชนิดข้อมูลที่ไม่ได้ประกาศอย่างชัดเจน จะถือว่าเป็น Variant
แม้ว่าการใช้ตัวแปรแบบ variant ที่ไม่ได้ประกาศไว้อย่างชัดเจนจะไม่เป็นที่แนะนำ แต่ก็อาจมีประโยชน์ในกรณีที่ทราบชนิดข้อมูลที่ต้องการได้เฉพาะในขณะรันไทม์ เมื่อคาดว่าชนิดข้อมูลจะเปลี่ยนแปลง หรือเมื่อต้องการพารามิเตอร์เสริมและอาร์เรย์พารามิเตอร์ ที่จริงแล้ว ภาษาโปรแกรมที่มีระบบชนิดข้อมูลแบบไดนามิกมักจะมี variant เป็น ชนิดข้อมูล เดียวที่ใช้ได้สำหรับตัวแปร
หนึ่งในความเปลี่ยนแปลงที่สำคัญในVisual Basic .NETซึ่งเป็นภาษา .NET คือ การแทนที่ประเภท Variant ด้วย ประเภท Object ของ .NET แม้จะมีแนวคิดที่คล้ายคลึงกัน แต่ก็มีความแตกต่างที่สำคัญ และไม่มีการแปลงโดยตรงระหว่างสองประเภทนี้ สำหรับการแปลง ซึ่งอาจจำเป็นในกรณีที่โค้ด Visual Basic .NET ทำงานร่วมกับอ็อบเจ็กต์ COM ของ Visual Basic 6 วิธีการปกติคือการใช้. NET marshalling
ตัวอย่าง
ใน Visual Basic ตัวแปรชื่อ A สามารถประกาศได้ทั้งแบบชัดเจนหรือแบบไม่ชัดเจน:
ดิมเอดิมเอในรูปแบบต่างๆในภาษา Delphiตัวแปรประเภท A จะถูกประกาศด้วยวิธีดังต่อไปนี้:
var A : variant ;รูปแบบ
ตัวแปรชนิด Variant ซึ่งเรียกโดยย่อว่า "Variant" ตามที่กำหนดไว้ใน Visual Basic ต้องการพื้นที่จัดเก็บ 16 ไบต์ และมีโครงสร้างดังนี้:
| ออฟเซ็ต | ขนาด | คำอธิบาย |
|---|---|---|
| 0 | 2 | ค่าที่ส่งคืนโดย VarType; ระบุประเภทของข้อมูลที่ตัวแปรนั้นบรรจุอยู่ |
| 2 | 6 | ไบต์ที่สงวนไว้ ใช้สำหรับชนิดข้อมูล VT_DECIMAL เท่านั้น |
| 8 | สูงสุด 8 | ข้อมูลที่ตัวแปรนั้นบรรจุอยู่ |
ประเภท
ต่อไปนี้เป็นตัวอย่างของรูปแบบต่างๆ ที่อาจพบได้ใน Visual Basic ในภาษาโปรแกรมอื่นๆ ก็อาจมีรูปแบบอื่นๆ อีกด้วย
| วาร์ไทป์ | เฮกซ์ | ประเภทโพรพวาเรียนต์ | สมาชิกโพรพวาเรียนต์ | ชื่อประเภท | ข้อมูลไบต์ | ประเภท C และ C++ |
|---|---|---|---|---|---|---|
| 0 | 0x00 | VT_EMPTY | ไม่มี | ว่าง1 | ||
| 1 | 0x01 | VT_NULL | ไม่มี | นัลล์2 | ||
| 2 | 0x02 | VT_I2 | ไอวัล | จำนวนเต็ม | 2A00 | สั้น |
| 3 | 0x03 | VT_I4 | ลวาล | ยาว | 2A000000 | ยาว |
| 4 | 0x04 | วีทีอาร์4 | ฟลตวัล | เดี่ยว | 00002842 | ลอย |
| 5 | 0x05 | VT_R8 | dblVal | สองเท่า | 0000000000004540 | สองเท่า |
| 6 | 0x06 | VT_CY | ไซวัล | สกุลเงิน | A068060000000000 | โครงสร้าง CY |
| 7 | 0x07 | VT_DATE | วันที่ | วันที่ | 00000000C0D5E140 | วันที่ (สองเท่า) |
| 8 | 0x08 | VT_BSTR | บีสตรวัล | สตริง | xxxxxxxx | (BSTR):(OLECHAR *):(WCHAR *):( wchar_t *) |
| 9 | 0x09 | VT_DISPATCH | pdispVal | |||
| 10 | 0x0a | VT_ERROR | รหัส | ข้อผิดพลาด | 2A000A80 | HRESULT (long int) |
| 11 | 0x0b | VT_BOOL | บูลวัล | บูลีน | FFFF | VARIANT_BOOL (short) |
| 12 | 0x0c | VT_VARIANT | pvarVal | ตัวแปร | ตัวแปร | |
| 13 | 0x0d | VT_UNKNOWN | punkVal | ไม่มีอะไร4 | 00000000 | ไม่ทราบ * |
| 14 | 0x0e | VT_DECIMAL | เดควาล | ทศนิยม | ||
| 16 | 0x10 | VT_I1 | ซีวาล | ไบต์ | ชาร์ | |
| 17 | 0x11 | VT_UI1 | บีวาล | ไบต์ | 2A | ไบต์ (อักขระไม่มีเครื่องหมาย) |
| 18 | 0x12 | VT_UI2 | uiVal | WORD (ชื่อย่อไม่ระบุ) | ||
| 19 | 0x13 | VT_UI4 | ulVal | ดีเวิร์ด (จำนวนเต็มไม่ระบุเครื่องหมาย) | ||
| 20 | 0x14 | VT_I8 | ค่า h | |||
| 21 | 0x15 | VT_UI8 | เอ่อวัล | |||
| 22 | 0x16 | VT_INT | ค่าอินท์ | |||
| 23 | 0x17 | VT_UINT | uintVal | |||
| 24 | 0x18 | VT_VOID | ||||
| 25 | 0x19 | VT_HRESULT | ขาด3 | 80020004 | HRESULT (long int) | |
| 26 | 0x1a | VT_PTR | ||||
| 27 | 0x1b | VT_SAFEARRAY | พาร์เรย์ | |||
| 28 | 0x1c | วีที_แคร์เรย์ | ||||
| 29 | 0x1d | VT_USERDEFINED | ||||
| 30 | 0x1e | VT_LPSTR | pszVal | |||
| 31 | 0x1f | VT_LPWSTR | pwszVal | |||
| 36 | 0x24 | VT_RECORD | ||||
| 37 | 0x25 | VT_INT_PTR | พินท์วัล | |||
| 38 | 0x26 | VT_UINT_PTR | puintVal | |||
| 8192 | 0x2000 | VT_ARRAY | พาร์เรย์ | |||
| 9 | การอ้างอิงวัตถุ5 | xxxxxxxx | ไม่ทราบ * |
- 1.ประเภทของตัวแปรที่ยังไม่ได้เริ่มต้นใช้งาน
- 2.ประเภทของค่า NULL ในฐานข้อมูล คือ ค่าที่ไม่ได้เริ่มต้นใช้งาน และไม่เทียบเท่ากับตัวชี้ว่าง (null pointer ) ในภาษา C++
- 3.ข้อผิดพลาด "ขาดพารามิเตอร์" เรียกว่า "ไม่พบพารามิเตอร์" (Missing arguments)
- 4.ประเภทของวัตถุถูกตั้งค่าเป็นค่าว่าง (null reference)
- 5. TypeName จะส่งคืนชื่อคลาสของวัตถุที่บรรจุอยู่ ข้อมูลจะเป็น ตัวชี้ อินเทอร์เฟซ กล่าวคือ ตัวชี้ไปยังตัวชี้ไปยังตารางเมธอดเสมือน (ซึ่งเป็นอาร์เรย์ของตัวชี้ฟังก์ชัน)
การใช้งานทั่วไป
คอลเลกชัน
คลาสCollectionในOLE Automationสามารถจัดเก็บรายการที่มีชนิดข้อมูลต่างกันได้ เนื่องจากไม่สามารถทราบชนิดข้อมูลของรายการเหล่านี้ได้ในระหว่างการคอมไพล์ ดังนั้นวิธีการเพิ่มรายการและดึงรายการจากคอลเลกชันจึงใช้ตัวแปรแบบ Variant หากFor Eachใช้โครงสร้างนี้ใน Visual Basic ตัวแปร Iterator ต้องเป็นชนิดข้อมูล Object หรือ Variant
การเรียกใช้เมธอดส่งคำสั่ง
ใน OLE Automation IDispatchอินเทอร์เฟซจะถูกใช้เมื่อไม่สามารถทราบคลาสของวัตถุได้ล่วงหน้า ดังนั้นเมื่อเรียกเมธอดบนวัตถุดังกล่าว ประเภทของอาร์กิวเมนต์และค่าที่ส่งคืนจะไม่ทราบในระหว่างการคอมไพล์ อาร์กิวเมนต์จะถูกส่งผ่านเป็นอาร์เรย์ของตัวแปร และเมื่อการเรียกเสร็จสมบูรณ์ ตัวแปรนั้นจะถูกส่งคืน
พารามิเตอร์เสริม
ใน Visual Basic เราสามารถประกาศให้พารามิเตอร์ของโปรแกรมเป็นตัวเลือกได้โดยการใส่คำหลัก `optional` ไว้ข้างหน้า เมื่อละเว้นพารามิเตอร์ Visual Basic จะส่งค่าพิเศษที่เรียกว่า `Missing`Optional ในตารางด้านบน ไปยังโปรแกรมเพื่อระบุว่าพารามิเตอร์นั้นหายไป เนื่องจากค่าดังกล่าวอาจเป็นค่าที่กำหนดไว้หรือค่าพิเศษ จึงต้องใช้ตัวแปร (variant)
ฟังก์ชันGetText ( ค่าByVal เสริมIndex ) เป็นสตริงถ้าIsMissing ( Index ) แล้วGetText = Item ( CurrentItem ) มิฉะนั้นGetText = Item ( Index ) สิ้นสุดเงื่อนไขสิ้นสุดฟังก์ชันในทำนองเดียวกัน คีย์เวิร์ดนี้ParamArrayสามารถใช้เพื่อส่งผ่านอาร์กิวเมนต์ทั้งหมดที่ตามมาในอาร์เรย์แบบแปรผันได้
ดูเพิ่มเติม
ลิงก์ภายนอก
- C++ Boost.Variant
- https://msdn.microsoft.com/en-ca/library/cc237865.aspx
- https://msdn.microsoft.com/en-us/library/windows/desktop/aa380072(v=vs.85).aspx
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ประเภทตัวแปร (COM)
Variant เป็น ชนิดข้อมูล ในภาษาโปรแกรมบางภาษา โดยเฉพาะ Visual Basic , OCaml , [ 1 ] Delphi และ C++ เมื่อใช้ Component Object Model เป็นการนำ แนวคิดที่มีชื่อเดียวกันมา ใช้ ใน...
ตัวอย่าง
ใน Visual Basic ตัวแปรชื่อ A สามารถประกาศได้ทั้งแบบชัดเจนหรือแบบไม่ชัดเจน:
รูปแบบ
ตัวแปรชนิด Variant ซึ่งเรียกโดยย่อว่า "Variant" ตามที่กำหนดไว้ใน Visual Basic ต้องการพื้นที่จัดเก็บ 16 ไบต์ และมีโครงสร้างดังนี้:
ประเภท
ต่อไปนี้เป็นตัวอย่างของรูปแบบต่างๆ ที่อาจพบได้ใน Visual Basic ในภาษาโปรแกรมอื่นๆ ก็อาจมีรูปแบบอื่นๆ อีกด้วย