しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

COM の CoClass について調べた

COM の CoClass を .NET から使う場合は、空のクラス定義に ComImportAttribute と GuidAttribute を付け、同じように定義しておいたインターフェースにキャストするのが一般的です。

しかし以下のようにインターフェースを new しているように書かれているコードを見たことがある方がいるかもしれません。

ISampleInterface si = new ISampleInterface();
si.Method();

これは CoClassAttribute を利用して、自動的に CoClass の new に置き換えています。

[CoClass(typeof(SampleInterfaceClass))]
interface ISampleInterface
{
    void Method();
}

[ComImport, Guid("...")]
class SampleInterfaceClass
{
}

CoClass の Type を CoClassAttribute に指定すると、インターフェースを new したときに自動で CoClass の new に置き換えられます。それで?という感じですがあまり見なかったの紹介してみました。

ちなみに、最初のコードは Reflector で見てみると

((ISampleInterface) new SampleInterfaceClass()).Method();

のようなコードに変換されていました。面白いですね。