본문 바로가기

Development/C#

Get Type From COM Object(System.__ComObject)

Introduction

.Net Framework를 이용해 COM객체를 사용하다보면, Object 형식으로 객체가 리턴되는 경우가 있는데 이 객체를 활용하기 위해서는 적절한 Type으로 캐스팅이 필요한 상황이 됩니다. 다행히 Object객체가 어떤 Type의 객체인지 알고 있는 상황이라면 간단하게 캐스팅문법을 이용해 캐스팅 해서 사용할 수 있지만, Type을 모르고 있다면 문제가 발생합니다.

일반적인 .Net Framework환경에서 였다면 간단히 GetType메서드를 통해 해당 객체의 Type을 확인 할 수 있지만, COM 객체의 경우 GetType메서드를 호출하게 되면 System.__ComObject 를 리턴하기 때문에 확인 할 수가 없습니다.

Microsoft KB문서(http://support.microsoft.com/kb/320523)에 보면 as 연산자를 이용해 하나씩 캐스팅을 할수 있다고 하지만, 이렇게 할경우 Type이 많아질 수록 더 많은 체크 루틴을 작성해야 하기 때문에 적합한 방법은 아닌것 같습니다.

이번시간에 소개할 내용은 이러한 상황에서 COM객체의 Type을 확인 할 수 있는 방법에대해 소개합니다.

GetTypeFromComObject Method

COM 객체의 Type을 가져오기 위해서 몇 가지 COM객체의 특성을 이용합니다. 첫째로 COM객체는 GetType메서드를 호출하면 System.__ComObject타입을 리턴한다는 점과, 둘째로 COM Interop Type은 Interface이고, 고유의 GUID를 갖는다는 점을 이용합니다. 소스코드에 대한 설명은 주석으로 대체합니다.



위 코드에서는 Type을 확인 하기 위한 객체와, 해당 COM객체의 Interop Assembly를 입력해 Assembly에 정의된 Type들 중 QueryInterface가 가능한 객체를 검색하는 과정을 수행합니다.