เมื่อเรียกอินเทอร์เฟซคอมโพเนนต์ COM โดยทั่วไปเราจะใช้เมธอด Type.InvoidMember() Type.InvoidMember() จำเป็นต้องยอมรับอาร์เรย์ประเภท Object เพื่อส่งข้อมูลพารามิเตอร์ของอินเทอร์เฟซเมื่อมีการเรียกใช้ สำหรับพารามิเตอร์อินเทอร์เฟซที่มีเฉพาะ [in] หรือ ByVal คุณจะต้องสร้างอาร์เรย์ดังกล่าวและส่งผ่านไปยัง Type.InvoidMember()
หากพารามิเตอร์อินเทอร์เฟซของส่วนประกอบ COM มีพารามิเตอร์ส่งคืน [out] หรือ [in, out] (ByRef ในส่วนประกอบ COM ที่พัฒนาใน VB) นอกเหนือจากวิธีการข้างต้นแล้วยังต้องทำงานเพิ่มเติมบางอย่างอีกด้วย คุณต้องบอก Type.InvoidMember() ว่าพารามิเตอร์ใดในพารามิเตอร์อินเทอร์เฟซคือพารามิเตอร์ [in][in,out] หรือ ByRef มิฉะนั้น คุณจะไม่ได้รับค่าพารามิเตอร์ที่ส่งกลับใดๆ ในการรับค่าของพารามิเตอร์ส่งคืน [in][in,out] หรือ ByRef คุณต้องใช้เมธอดโอเวอร์โหลด Type.InvoidMember() ที่มีอาร์เรย์ ParameterModifier
อาร์เรย์ parameterModifier จำเป็นต้องมีองค์ประกอบเดียวเท่านั้น อ็อบเจ็กต์ parameterModifier มีคุณสมบัติดัชนีที่เรียกว่า Item สำหรับพารามิเตอร์การโทร ในอินเทอร์เฟซการเรียก หากพารามิเตอร์ Nth เป็นพารามิเตอร์อ้างอิง ดังนั้นคุณสมบัติ Nth Item จะต้องกำหนดค่าเป็น true เพื่อบอก Type.InvoidMember() ว่านี่คือพารามิเตอร์อ้างอิง
ต่อไปนี้เป็นตัวอย่าง C# ของการเรียกอินเทอร์เฟซ COM ด้วยพารามิเตอร์สามตัว (สองตัวคือพารามิเตอร์อ้างอิง) ในตัวอย่างนี้ พารามิเตอร์ตัวที่สองและพารามิเตอร์ตัวที่สามเป็นทั้งพารามิเตอร์อ้างอิง:
พิมพ์ ComObjType;
วัตถุ ComObj;
string ReturnValue;
//สร้างการอ้างอิงไปยังวัตถุ COM
ComObjType = Type.GetTypeFromProgID("SomeComServer.SomeComObject");
ComObj = Activator.CreateInstance(ComObjType);
//สร้างอาร์เรย์พารามิเตอร์สำหรับการเรียก InvokeMethod และเริ่มต้นแต่ละองค์ประกอบพารามิเตอร์
วัตถุ [] ParamArray = วัตถุใหม่ [3];
ParamArray [0] = "ในพารามิเตอร์" ;
พารามิเตอร์อาร์เรย์[1] = 5;
ParamArray[2] = "" ;
//สร้างอาร์เรย์ parameterModifier (โปรดทราบว่ามีเพียงองค์ประกอบเดียวในอาร์เรย์ parameterModifier ที่กล่าวถึงข้างต้น)
//มีพารามิเตอร์สามตัวที่นี่ ดังนั้น เมื่อสร้างอ็อบเจ็กต์ parameterModifier คุณต้องระบุจำนวนพารามิเตอร์ในตัวสร้าง
//ใช้แอตทริบิวต์ดัชนีของพารามิเตอร์เพื่อระบุว่าพารามิเตอร์ใดเป็นพารามิเตอร์ที่ส่งคืน
//ไม่จำเป็นต้องระบุพารามิเตอร์ที่เป็น [in] หรือ ByRef
parameterModifier[] ParamMods = ตัวแก้ไขพารามิเตอร์ใหม่ [1];
ParamMods[0] = ใหม่ parameterModifier (3); // เตรียมใช้งานเป็นจำนวนพารามิเตอร์อินเทอร์เฟซ
ParamMods[0][1] = true; // ตั้งค่าพารามิเตอร์ตัวที่สองเป็นพารามิเตอร์ส่งคืน
ParamMods[0][2] = true; //ตั้งค่าพารามิเตอร์ที่สามเป็นพารามิเตอร์ส่งคืน
//เรียกใช้ฟังก์ชันโอเวอร์โหลดที่มีอาร์เรย์ parametermodifier
ReturnValue = (สตริง) ComObjType.InurgeMember ("ReturnSomeValues", // ชื่อฟังก์ชันอินเทอร์เฟซ BindingFlags.Default | BindingFlags.InurgeMethod,
โมฆะ,
ComObj, // คอมโพเนนต์ COM ที่เรียกว่า ParamArray, // อาร์เรย์พารามิเตอร์ ParamMods, // อาร์เรย์ parameterModifier ระบุพารามิเตอร์ที่ส่งคืนเป็นโมฆะ,
null);
//แสดงค่าของพารามิเตอร์
Console.WriteLine ("Param1 = {0}", ParamArray[0]) ;
Console.WriteLine ("Param2 = {0}", ParamArray[1]) ;
Console.WriteLine ("Param3 = {0}", ParamArray[2]) ;
Console.WriteLine ("Return Value = {0}", ReturnValue ) ;
โปรดทราบว่าในการส่งอาร์เรย์ ParameterModifier ที่ถูกต้องไปยัง InvoidMethod() คุณต้องเตรียมข้อมูลเบื้องต้นประเภทข้อมูลของพารามิเตอร์ในอาร์เรย์พารามิเตอร์ที่ยอมรับการส่งคืน ในตัวอย่างข้างต้น พารามิเตอร์ที่สองคือจำนวนเต็ม [5] และพารามิเตอร์ที่สามคือข้อความ ['']