내 COM 인터페이스에 IStream*
을 수락하는 메서드를 추가하고 싶습니다. 다음은 IDL 발췌는 다음과 같습니다형식 라이브러리를 가져올 때 이상한 네임 스페이스 추가
import "oaidl.idl";
import "ocidl.idl";
import "objidl.idl";//IStream is declared in this .idl file
[
uuid(uuidhere),
version(1.0)
]
library MyLibrary
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
object,
uuid("interfaceid"),
dual,
nonextensible,
oleautomation,
hidden
]
interface IMyInterface : IUnknown {
HRESULT LoadStream([in] IStream* stream);
HRESULT LoadUnknown([in] IUnknown* unkn);
};
}
나는 .idl
파일을 컴파일하고 다른 프로젝트에서 형식 라이브러리를 가져옵니다.
OLEView 파일에서 .tlb
을 검토 할 때 IStream
이 내 typelib에 선언되어 있지만 IUnknown
은 그렇지 않습니다. 이로 인해 문제가 발생합니다. 다른 프로젝트에서 IMyInterface::LoadStream()
을 호출하려고 시도하면 C++에서 IStream*
을 MyLibrary::IStream*
으로 변환 할 수 없다고 말합니다. 동시에 IUnknown에 대해 불평하지 않습니다.
왜 MIDL은 형식 정의 안에 IStream 정의를 넣고 전역 정의로 취급하지 않습니까?
FYI, ocidl.idl import oaidl.idl, oaidl.dil은 objidl.idl을 가져오고 objidl.idl은 unknwn.idl을 가져옵니다. 따라서 ocidl.idl을 가져와야합니다. –