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が正しくマーシャリングされないのはなぜですか?