Я хочу добавить метод, принимающий IStream*
в свой COM-интерфейс. Вот выдержка из холостого хода:
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
и импортирую библиотеку типов в другой проект.
Когда я просматриваю .tlb
в файле OLEView, я вижу, что IStream
объявлен внутри моей библиотеки типов, а IUnknown
— нет. Это вызывает проблемы - когда я пытаюсь вызвать IMyInterface::LoadStream()
в другом проекте, С++ говорит, что не может преобразовать IStream*
в MyLibrary::IStream*
. В то же время он не жалуется на IUnknown.
Почему MIDL помещает определение IStream внутрь библиотеки типов, а не рассматривает его как глобальное определение?