0

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 を別のプロジェクトにインポートします。

.tlbOLEView ファイルで を確認すると、typelibIStream内で宣言されているが宣言されていIUnknownないことがわかります。これにより問題が発生します。別のプロジェクトを呼び出そうとするとIMyInterface::LoadStream()、C++ で .csv に変換できないと表示IStream*されMyLibrary::IStream*ます。同時に、IUnknown について不平を言うことはありません。

MIDL が IStream 定義を typelib 内に配置し、それをグローバル定義として扱わないのはなぜですか?

4

1 に答える 1

0

2 つの ISt​​ream があり、1 つはグローバル (objidl.idl で宣言)、もう 1 つは MyLibrary 名前空間 (idl で宣言) にあります。MyLibrary 名前空間にあるものを削除します。

スクリプト クライアントをサポートする予定がある場合は、IStream がスクリプト言語でサポートされていないため、IDispatch インターフェイスも公開することをお勧めします。

于 2009-11-12T21:33:00.397 に答える