我想添加一個接受IStream*
到我的COM接口的方法。這裏的IDL摘錄:導入typelib時奇怪的命名空間
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定義放入typelib中,而不是將其視爲全局定義?
FYI,ocidl.idl導入oaidl.idl,oaidl.dil導入objidl.idl,objidl.idl導入unknwn.idl。所以你只需要導入ocidl.idl。 – 2015-02-06 21:08:36