我想向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
文件并将 typelib 导入另一个项目。
当我查看.tlb
OLEView 文件时,我看到IStream
在我的 typelib 中声明了但IUnknown
不是。这会导致问题 - 当我尝试调用IMyInterface::LoadStream()
另一个项目时,C++ 说它无法转换IStream*
为MyLibrary::IStream*
. 同时它也不会抱怨 IUnknown。
为什么 MIDL 将 IStream 定义放在 typelib 中而不将其视为全局定义?