この記事に従って、次のように C++ COM クラス/インターフェイス宣言を C# に正常に変換しました。
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid(IfaceGuid)]
public interface IFoo
{
void Bar();
}
[ComImport, Guid(ClassGuid)]
public class Foo
{ }
私はこのように使用します:
var foo = new Foo();
var ifoo = (IFoo)foo;
ifoo.Bar();
Foo
私の質問は、それが実装されておらずIFoo
(実行時でもtypeof(Foo).GetInterfaces()
空である)、インターフェースへのユーザー定義の変換が禁止されていることを考えると、これはどのように機能するのでしょうか?
これは、COM 専用に予約された特別な処理ですか? C# の仕様はこれについて何を述べているのでしょうか?