C# クライアントで使用されるインプロセス COM サーバー (MSVC10 に組み込まれた dll) があります。インターフェイスの 1 つは次のように定義されます。
[
object,
uuid(some guid),
dual,
nonextensible,
helpstring("IDerived Interface"),
pointer_default(unique)
]
interface IDerived : IBase{
};
co-class は、IDerived
and 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
が正しくマーシャリングされないのはなぜですか?