.Net 2.0으로 작성된 다른 프로젝트와의 호환성을 허용하기 위해 COM interop (최신 응용 프로그램은 .Net 4.0에 포함됨)이 필요했습니다. 이것은 2.0 프로세스가 .Net 4.0에서 SxS 실행을 사용할 수 있기 때문에 효과가 있습니다. 내가 이해에서 COM의 상호 운용성을 위해 나는 같은 것을 할 필요가 :리플렉션을 사용하여 COM 개체에서 메서드 호출
Type myClass = Type.GetTypeFromProgID("Net4Assembly.Assembly4");
object myInstance = Activator.CreateInstance(myClass);
IAssembly4 assembly4Interface = (IAssembly4)myInstance;
assembly4Interface.CallMethod();
이미 COM 구성 요소를 생성하고 등록을하고이 잘 작동합니다. 그러나 문제는 2.0으로 작성된 프로젝트가 우리 부서 외부에 있기 때문에 위의 3 번 줄에서 리플렉션을 사용하여 캐스팅을 수행하는 방법을 찾고 싶습니다. 지금까지 나는 제안을 찾았습니다 Invoke method using Reflection on COM Object
그러나 COMObject 유형의 "myInstance"에있는 모든 객체 메소드를 얻었으므로이 메소드가 작동하지 않습니다. 언급 된 메소드 만 볼 수 있습니다. 그 링크에. 이 오류 얻을 :
Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))
내가 어떻게 든 인터페이스에 COMObject
캐스팅해야한다고 생각을하고 나는 방법에 액세스 할 것인가? COMObject
에서 인터페이스를 추출 할 수 없으면 리플렉션을 사용하여 메소드를 호출 하시겠습니까? COMObject
에서 GetInterfaces(
을 시도했지만 아무 것도 반환되지 않습니다.
같은
No Misspelled Assembly Name
시도 뭔가'헤더에 system.Runttime.InteropServices'을 그 코드가 작동 사용하는 것이이 작동하는지 확실하지 오전하지만 가정 ...? 이'Error'에 대한 가장 일반적인 문제는'호출하려고하는 어셈블리 이름'에 오타가 있기 때문입니다 – MethodMan작동 여부는 확실치 않지만'동적 인 myInstance = Activator.CreateInstance (내 수업); myInstance.CallMethod(); ' – I4V
예. 내가 처음 확인한 내용입니다. 어셈블리 이름은 IAssembly4 인터페이스로 캐스팅하면 이미 CallMethod()를 호출 할 수 있으므로 올바른 이름이어야합니다. 나는 또한 Reflection을 사용하여 호출하는 메서드의 이름 (CallMethod())을 두 번 확인했습니다. 또한 InvokeMember와 InvokeMethod가이 경우 왜 다른지 링크에서 언급하지 않습니다. –