Saat memanggil antarmuka komponen COM, kami biasanya menggunakan metode Type.InvokeMember(). Type.InvokeMember() perlu menerima array bertipe Object untuk meneruskan informasi parameter antarmuka saat dipanggil. Untuk parameter antarmuka yang hanya berisi [dalam] atau ByVal, Anda hanya perlu membuat array seperti itu dan meneruskannya ke Type.InvokeMember().
Jika parameter antarmuka komponen COM berisi parameter pengembalian [keluar] atau [masuk, keluar] (ByRef dalam komponen COM yang dikembangkan di VB), maka selain metode di atas, beberapa pekerjaan tambahan harus dilakukan. Anda harus memberi tahu Type.InvokeMember() parameter mana dalam parameter antarmuka yang merupakan parameter [masuk][masuk,keluar] atau ByRef, jika tidak, Anda tidak akan mendapatkan nilai parameter kembalian. Untuk mendapatkan nilai parameter pengembalian [in][in,out] atau ByRef, Anda harus menggunakan metode kelebihan beban Type.InvokeMember() yang berisi array ParameterModifier.
Array ParameterModifier hanya perlu berisi satu elemen. Objek ParameterModifier memiliki properti indeks yang disebut Item untuk parameter pemanggil. Dalam antarmuka panggilan, jika parameter ke-N adalah parameter referensi, maka properti Item ke-N harus diberi nilai true untuk memberi tahu Type.InvokeMember() bahwa ini adalah parameter referensi.
Berikut ini adalah contoh C# pemanggilan antarmuka COM dengan tiga parameter (dua di antaranya merupakan parameter referensi). Dalam contoh ini, parameter kedua dan parameter ketiga keduanya merupakan parameter referensi:
ketik ComObjType;
objek ComObj;
string ReturnValue;
//Buat referensi ke objek COM
ComObjType = Type.GetTypeFromProgID("SomeComServer.SomeComObject");
ComObj = Activator.CreateInstance(ComObjType);
//Buatlah array parameter untuk panggilan ke InvokeMethod dan inisialisasi setiap elemen parameter
objek[] ParamArray = objek baru[3];
ParamArray [0] = "DalamParam" ;
ParamArray[1] = 5;
ParamArray[2] = "" ;
//Bangun array ParameterModifier (perhatikan bahwa hanya ada satu elemen dalam array ParameterModifier yang disebutkan di atas)
//Ada tiga parameter di sini. Oleh karena itu, saat membuat objek ParameterModifier, Anda harus menunjukkan jumlah parameter dalam konstruktornya.
//Gunakan atribut indeks dari parameter untuk menunjukkan parameter mana yang merupakan parameter yang dikembalikan
//Tidak perlu menentukan parameter yang ada di [dalam] atau ByRef.
ParameterModifier[] ParamMods = ParameterModifier baru [1];
ParamMods[0] = new ParameterModifier (3); // Diinisialisasi ke jumlah parameter antarmuka
ParamMods[0][1] = true; // Tetapkan parameter kedua sebagai parameter kembalian
ParamMods[0][2] = true; //Tetapkan parameter ketiga sebagai parameter kembalian
//Panggil fungsi kelebihan beban yang berisi array ParameterModifier
ReturnValue = (string) ComObjType.InvokeMember("ReturnSomeValues", //Nama fungsi antarmuka BindingFlags.Default | BindingFlags.InvokeMethod,
batal,
ComObj, // Komponen COM yang dipanggil ParamArray, // Array parameter ParamMods, // Array ParameterModifier yang menentukan parameter kembalian null,
null);
//Menampilkan nilai parameter
Console.WriteLine("Param1 = {0}", ParamArray[0]) ;
Console.WriteLine("Param2 = {0}", ParamArray[1]) ;
Console.WriteLine("Param3 = {0}", ParamArray[2]) ;
Console.WriteLine ("Return Value = {0}", ReturnValue ) ;
Perhatikan bahwa untuk meneruskan array ParameterModifier yang benar ke InvokeMethod(), Anda harus menginisialisasi tipe data parameter dalam array parameter yang menerima pengembalian. Pada contoh di atas, parameter kedua adalah bilangan bulat [5], dan parameter ketiga adalah teks [''].