COM interop은 반드시 하나의 COM 라이브러리에 대해 하나의 interop 라이브러리를 만들 필요는 없습니다. 이 형식 라이브러리 가져 오기 도구의 기본 동작입니다. 하나의 COM 라이브러리에 대해 여러 COM 라이브러리 또는 여러 interop 어셈블리에 대해 하나의 interop 어셈블리를 제공 할 수도 있습니다.
interop 어셈블리가 COM 라이브러리에도 연결되어 있지 않습니다. 대상 시스템에 소스 라이브러리를 설치하지 않고도 쉽게 전개 할 수 있습니다. 사실, 라이브러리 오브젝트 중 하나의 인스턴스를 작성하는 즉시 실패합니다. interop 어셈블리 안의 개체는 원본을 찾을 때 중요합니다. 그들은 런타임 호출 가능 래퍼 (런타임은 CLR을 의미 함)이라고합니다. 그것이 귀하의 interop 어셈블리가 RCW.Xyz.dll
으로 불리는 이유입니다. 적절하게 어셈블리의 개발자는 tlbimp의 /out
스위치를 사용하여 생성했습니다.
라이브러리를 검색하려면 특정 COM 유형이 정의되어 있고 interop 어셈블리 내부에서 클래스 이름을 찾으십시오. Visual Studio의 개체 탐색기를 사용하여 interop 어셈블리를 해체 할 필요가 없습니다. 이러한 어셈블리는 일반적으로 코드를 전혀 정의하지 않습니다. CLR을 만족시키는 메타 데이터 만 제공합니다. 각 클래스는 ComImport
속성과 Guid
속성으로 표시됩니다. 이 GUID를 사용하여 레지스트리에서 클래스를 식별하십시오 (대답에 언급 된대로 HKEY_CLASSES_ROOT\CLSID\{GUID}
). Inproc32
키의 기본값은 형식이 정의 된 라이브러리입니다. 이는 inproc COM 서버 (DLL의 경우 COM als가 다른 라이브러리 유형을 지원함)에만 적용됩니다.
위에서 언급했듯이, 이것은 실제로 각 클래스에 대해 수행되어야합니다. 그러나 interop 어셈블리 개발자가 형식 라이브러리 가져 오기 도구를 사용하여 interop 어셈블리를 생성하고 다른 스레드와 병합하거나 수정하지 않은 경우 이전에 언급 한 tlbimp의 기본 동작 때문에 한 유형에서만 수행해야합니다.