COM 구성 요소 인터페이스를 호출할 때 일반적으로 Type.InvokeMember() 메서드를 사용합니다. Type.InvokeMember()는 호출 시 인터페이스의 매개변수 정보를 전달하기 위해 Object 유형의 배열을 허용해야 합니다. [in] 또는 ByVal만 포함하는 인터페이스 매개 변수의 경우 해당 배열을 구성하고 이를 Type.InvokeMember()에 전달하기만 하면 됩니다.
COM 구성 요소의 인터페이스 매개 변수에 [out] 또는 [in, out] 반환 매개 변수(VB에서 개발된 COM 구성 요소의 ByRef)가 포함된 경우 위의 방법 외에도 몇 가지 추가 작업을 수행해야 합니다. 인터페이스 매개변수의 어떤 매개변수가 [in][in,out] 또는 ByRef 매개변수인지 Type.InvokeMember()에게 알려야 합니다. 그렇지 않으면 반환 매개변수 값을 얻을 수 없습니다. [in][in,out] 또는 ByRef 반환 매개 변수의 값을 가져오려면 ParameterModifier 배열이 포함된 Type.InvokeMember() 오버로드된 메서드를 사용해야 합니다.
ParameterModifier 배열에는 요소 하나만 포함하면 됩니다. ParameterModifier 개체에는 호출 매개변수에 대한 Item이라는 인덱스 속성이 있습니다. 호출 인터페이스에서 N번째 매개 변수가 참조 매개 변수인 경우 N번째 Item 속성에 true 값을 할당하여 이것이 참조 매개 변수임을 Type.InvokeMember()에 알려야 합니다.
다음은 세 개의 매개 변수(그 중 두 개는 참조 매개 변수)를 사용하여 COM 인터페이스를 호출하는 C# 예입니다. 이 예에서 두 번째 매개 변수와 세 번째 매개 변수는 모두 참조 매개 변수입니다.
type ComObjType;
개체 ComObj;
string ReturnValue;
//COM 객체에 대한 참조를 생성합니다.
ComObjType = Type.GetTypeFromProgID("SomeComServer.SomeComObject");
ComObj = Activator.CreateInstance(ComObjType);
//InvokeMethod 호출을 위한 매개변수 배열을 구성하고 각 매개변수 요소를 초기화합니다.
객체[] ParamArray = 새 객체[3];
ParamArray [0] = "InParam" ;
ParamArray[1] = 5;
ParamArray[2] = "" ;
//ParameterModifier 배열 구성(위에서 언급한 ParameterModifier 배열에는 요소가 하나만 있음에 유의)
//여기에는 세 가지 매개변수가 있습니다. 따라서 ParameterModifier 객체를 생성할 때 해당 생성자에 매개변수 수를 표시해야 합니다.
//매개변수의 인덱스 속성을 사용하여 어떤 매개변수가 반환된 매개변수인지 나타냅니다.
//[in] 또는 ByRef인 매개변수를 지정할 필요가 없습니다.
ParameterModifier[] ParamMods = 새로운 ParameterModifier [1];
ParamMods[0] = new ParameterModifier (3); // 인터페이스 매개변수 개수로 초기화됨
ParamMods[0][1] = true; // 두 번째 매개변수를 반환 매개변수로 설정합니다.
ParamMods[0][2] = true; //세 번째 매개변수를 반환 매개변수로 설정합니다.
//ParameterModifier 배열이 포함된 오버로드된 함수 호출
ReturnValue = (문자열) ComObjType.InvokeMember("ReturnSomeValues", //인터페이스 함수 이름 BindingFlags.Default | BindingFlags.InvokeMethod,
널,
ComObj, // 호출된 COM 구성요소 ParamArray, // 매개변수 배열 ParamMods, // 반환 매개변수 null을 지정하는 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 배열을 InvokeMethod()에 전달하려면 반환을 허용하는 매개변수 배열에서 매개변수의 데이터 유형을 초기화해야 합니다. 위의 예에서 두 번째 매개변수는 정수 [5]이고, 세 번째 매개변수는 텍스트 ['']입니다.