IStream*
COM インターフェイスに受け入れるメソッドを追加したいと考えています。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
、typelib を別のプロジェクトにインポートします。
.tlb
OLEView ファイルで を確認すると、typelibIStream
内で宣言されているが宣言されていIUnknown
ないことがわかります。これにより問題が発生します。別のプロジェクトを呼び出そうとするとIMyInterface::LoadStream()
、C++ で .csv に変換できないと表示IStream*
されMyLibrary::IStream*
ます。同時に、IUnknown について不平を言うことはありません。
MIDL が IStream 定義を typelib 内に配置し、それをグローバル定義として扱わないのはなぜですか?