저는 COM에서 비교적 새 것이므로 어리석은 질문 인 경우 사과합니다. 형식 라이브러리로 컴파일 된 COM 인터페이스가 많이 있습니다. A. 이 형식 라이브러리는 내 솔루션에있는 DLL 중 하나 (a.dll)의 리소스입니다. 별개의 DLL (b.dll)에 들어가는 별도의 형식 라이브러리 (B)에서 유형 라이브러리 A의 인터페이스를 구현하는 코 클라스를 정의하고 싶습니다.다른 유형 라이브러리의 인터페이스를 구현하는 COM 코 클라스
import "oaidl.idl";
import "ocidl.idl";
// Import IMyInterface, which is part of MyLibA.tlb
import "MyInterface.idl";
[
uuid(E80492A8-1E8C-4ABF-B4DE-9C252C445AFE),
version(1.0),
helpstring("MyLibB Type Library")
]
library MyLibB
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
importlib("MyLibA.tlb);
[
uuid(25E3CD5E-FA06-4845-BE3E-F260985AFB20),
helpstring("My CoClass")
]
coclass MyCoClass
{
[default] interface IMyInterface;
};
};
내가 위의 확인을 컴파일 할 수 있습니다,하지만 난는 OLEView에 관한 의해 생성 된 TLB 파일을 열 때, 나는 오류 메시지 TYPE_E_CANTLOADLIBRARY
를 얻을 아래 내가 생각하고있는 것을의 간단한 예로서 IDL 코드를 참조하십시오. 나는 내가하고 싶은 일이 가능하지 않다고 생각하기 시작했다. 지금까지의 나의 실험은 형식 라이브러리가 coclass가 coclass 정의 자체와 함께 구현 한 모든 인터페이스를 포함 할 필요가 있다고 제안한다. 사실입니까? 나는 importlib("MyLibA.tlb);
문을 제거하면
, 나는 오류없이는 OLEView에서 컴파일 된 TLB 파일을 볼 수 있지만 MyLibB.tlb는 또한 IMyInterface
인터페이스의 정의, 즉 인터페이스가 모두 형식 라이브러리에 두 번 정의가 포함되어 있습니다. 내 응용 프로그램에서 나는 a.dll 및 b.dll을 등록이 필요없는 COM을 사용하여로드하기 때문에 이것을 원하지 않습니다. 이 시나리오에서는 둘 이상의 유형 라이브러리에서 동일한 인터페이스 정의가 발견 될 경우 활성화 컨텍스트 생성이 실패합니다.
원하는 인터페이스와 coclass 분리를 별도의 형식 라이브러리에서 얻을 수있는 방법에 대한 제안 사항은 무엇입니까?
감사합니다. 이제 OLEView에서 MyLibB.tlb의 tlb를 볼 수 있습니다. MyLibA.tlb을 등록하지 않은 이유는 등록 무료 COM을 사용했기 때문입니다. – themik81
다른 사람이 유용하다고 생각할 때 주석을 제거하고 답변으로 추가했습니다. –