อ่าน 2 นาที
ไอดิสแพทช์
IDispatch เป็น อินเทอร์เฟซ ที่เปิดเผยโปรโตคอล OLE Automation [ 1 ] โดยขยายจาก IUnknown ซึ่งเป็นหนึ่งในอินเทอร์เฟซมาตรฐานที่สามารถเปิดเผยได้โดย วัตถุ COM COM...
ไอดิสแพทช์
IDispatchเป็นอินเทอร์เฟซที่เปิดเผยโปรโตคอลOLE Automation [ 1 ]โดยขยายจากIUnknownซึ่งเป็นหนึ่งในอินเทอร์เฟซมาตรฐานที่สามารถเปิดเผยได้โดย วัตถุ COM COM แยกความแตกต่างระหว่างอินเทอร์เฟซสามประเภท ได้แก่ แบบกำหนดเองซึ่งเป็นอินเทอร์เฟซ IUnknown ที่ใช้ VTABLE, แบบDispatchซึ่งเป็นอินเทอร์เฟซ IDispatch ที่รองรับการตรวจสอบภายใน และ อินเทอร์เฟซแบบ คู่ที่รองรับทั้งสองประเภท
อินเทอร์เฟซ Automation (IDispatch) ช่วยให้แอปพลิเคชันไคลเอ็นต์ค้นหาคุณสมบัติและเมธอดที่รองรับโดยอ็อบเจ็กต์ในขณะรันไทม์ กล่าวคือเป็นการนำแนวคิดRTTI มาใช้ นอกจากนี้ยังให้ข้อมูลที่จำเป็นในการเรียกใช้คุณสมบัติและเมธอดเหล่านั้น แอปพลิเคชันไคลเอ็นต์ไม่จำเป็นต้องรับรู้ถึงสมาชิกของอ็อบเจ็กต์เมื่อมีการคอมไพล์ ซึ่งช่วยให้โปรแกรมสคริปต์สามารถเรียกใช้อ็อบเจ็กต์ COM และ ActiveX ได้บนแพลตฟอร์มต่างๆ เช่น เซิร์ฟเวอร์ ASPและJavaScriptบนInternet Explorerซึ่งในขณะที่IISหรือ IE ถูกสร้างขึ้นนั้นยังไม่ทราบข้อกำหนดการเรียกใช้ ในทางตรงกันข้าม ไลบรารีอ็อบเจ็กต์แบบง่ายจะถูกคอมไพล์และเชื่อมโยงเข้ากับโปรแกรม เช่น การเรียกใช้ DLL จำเป็นต้องทราบชื่อฟังก์ชันและพารามิเตอร์ในขณะคอมไพล์
ผู้เขียนสคริปต์สามารถขอเมธอดหรือคุณสมบัติจากอ็อบเจ็กต์ COM ที่มันรู้จักอยู่แล้วจากเอกสารประกอบ จากนั้น ไคลเอนต์สามารถเรียกใช้ฟังก์ชันด้วย Invoke ที่จัดเตรียมโดยอินเทอร์เฟซ IDispatch ซึ่งเป็นรูปแบบหนึ่งของการผูกแบบล่าช้าความสามารถประเภทนี้ได้รับการสนับสนุนโดยDynamic Data Exchange (DDE) เช่นกัน แต่ไม่ได้รับความนิยมเนื่องจากอยู่ในระดับต่ำเกินไป
อินเทอร์เฟซ การส่ง คำสั่ง มีความยืดหยุ่น แต่มีค่าใช้จ่ายในการตรวจสอบภายในและการเรียกใช้งานเพิ่มเติมเมื่อเทียบกับอินเทอร์เฟซแบบกำหนดเอง[ 2 ]ดังนั้นจึงมักเป็นความคิดที่ดีที่จะสนับสนุนอินเทอร์เฟซทั้งสองประเภทด้วย อินเทอร์เฟซ คู่ด้วยวิธีนี้ ลูกค้าที่สนับสนุนการเรียกใช้งานตาม VTABLE สามารถใช้ อินเทอร์เฟซ แบบกำหนดเองแทน อินเทอร์ เฟซ การส่งคำสั่ง ได้
วิธีการ
แต่ละคุณสมบัติและเมธอดที่ใช้งานโดยอ็อบเจ็กต์ที่รองรับอินเทอร์เฟซ IDispatch จะมีสิ่งที่เรียกว่า Dispatch ID ซึ่งมักย่อว่า DISPID DISPID เป็นวิธีการหลักในการระบุคุณสมบัติหรือเมธอด และต้องระบุให้กับ ฟังก์ชัน Invokeเพื่อเรียกใช้คุณสมบัติหรือเมธอดนั้น พร้อมกับอาร์เรย์ของVariantที่มีพารามิเตอร์ สามารถใช้ฟังก์ชัน GetIDsOfNamesเพื่อรับ DISPID ที่เหมาะสมจากชื่อคุณสมบัติหรือเมธอดที่อยู่ในรูปแบบ สตริง ได้
IDispatch สืบทอดมาจากIUnknownและขยายเพิ่มเติมด้วยเมธอดอีกสี่เมธอด:
interface IDispatch : public IUnknown { virtual HRESULT GetTypeInfoCount ( unsigned int * pctinfo ) = 0 ; virtual HRESULT GetTypeInfo ( unsigned int iTInfo , LCID lcid , ITypeInfo ** ppTInfo ) = 0 ; virtual HRESULT GetIDsOfNames ( REFIID riid , OLECHAR ** rgszNames , unsigned int cNames , LCID lcid , DISPID * rgDispId ) = 0 ; HRESULT เสมือนเรียกใช้( DISPID dispIdMember , REFIID riid , LCID lcid , WORD wFlags , DISPPARAMS * pDispParams , VARIANT * pVarResult , EXCEPINFO * pExcepInfo , int ที่ไม่ได้ลงนาม* puArgErr ) = 0 ; };รหัสอินเทอร์เฟซIDispatch ถูกกำหนดเป็นGUIDที่มีค่าเป็น {00020400-0000-0000-C000-000000000046}
ลิงก์ภายนอก
- DispHelperเป็น ไลบรารี โอเพนซอร์สที่ช่วยในการใช้งาน IDispatch จากภาษา C หรือ C++
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ไอดิสแพทช์
IDispatch เป็น อินเทอร์เฟซ ที่เปิดเผยโปรโตคอล OLE Automation [ 1 ] โดยขยายจาก IUnknown ซึ่งเป็นหนึ่งในอินเทอร์เฟซมาตรฐานที่สามารถเปิดเผยได้โดย วัตถุ COM COM...
วิธีการ
แต่ละคุณสมบัติและเมธอดที่ใช้งานโดยอ็อบเจ็กต์ที่รองรับอินเทอร์เฟซ IDispatch จะมีสิ่งที่เรียกว่า Dispatch ID ซึ่งมักย่อว่า DISPID DISPID เป็นวิธีการหลักในการระบุคุณสมบัติหรือเมธอด และต้องระบุให้กับ ฟังก์ชัน Invoke เพื่อเรียกใช้คุณสมบัติหรือเมธอดนั้น...
ลิงก์ภายนอก
DispHelperเป็น ไลบรารี โอเพนซอร์ส ที่ช่วยในการใช้งาน IDispatch จากภาษา C หรือ C++ ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=IDispatch&oldid=1305061055 "