1

C# クライアントで使用されるインプロセス COM サーバー (MSVC10 に組み込まれた dll) があります。インターフェイスの 1 つは次のように定義されます。

[
    object,
    uuid(some guid),
    dual,
    nonextensible,
    helpstring("IDerived Interface"),
    pointer_default(unique)
]
interface IDerived : IBase{
};

co-class は、IDerivedand IBase(およびその他のインターフェイス) の両方を実装します。

[
    uuid(some guid),
    helpstring("SomeClass Class"),
    noncreatable,
    hidden
]
coclass SomeClass
{
    [default] interface IDerived;
    interface IBase;
    // etc.
};

co-class はアパートメント スレッドです。MTA クライアント スレッドがIDerivedそのメソッド (から継承IBase) を取得して呼び出そうとすると、プロキシ/スタブのどこかでクラッシュします。STA ではうまく機能するので、IDerived正しくマーシャリングされていないと思います。一方、IBase明示的に QI を実行するか、メソッドを に追加するとIDerived、すべてがうまく機能します。

IDerivedが正しくマーシャリングされないのはなぜですか?

4

0 に答える 0