2

C# プロジェクト (Visual Studio 2008) への参照として C++ COM dll を追加しています。VS は参照を追加しますが、生成された相互運用ライブラリには元の typelib (.idl) 定義の名前が反映されません。私のライブラリ定義は次のようになります。

[
   uuid(...),
   helpstring("MyLib")
]
library MyLib
{    
    [
        uuid(...),
        helpstring("MyCom CoClass")
    ]
    coclass MyComCoClass
    {
        [default] interface IMyInterface;
        interface IMyInheritedInterface;
        interface IMyBaseInterface;
    };
}

したがって、IMyInterface は IMyInheritedInterface から継承し、IMyInheritedInterface は IMyBaseInterface から継承します。この COM の .dll が追加されたときに、これらすべてのインターフェイスを使用できるようにします。上記の typelib に対して VS が生成する相互運用アセンブリでは、IMyInterface が MyInterface になります。なぜ、それを回避する方法はありますか?

ありがとう

4

1 に答える 1

2

typelibインポーターは、インターフェースがコクラスのデフォルトのインターフェースであり、そのコクラスによってのみ使用される場合にそれを行います。

したがって、回避策の1つは、typelibに別のダミーコクラスを追加し、IMyInterfaceをそのデフォルトインターフェイスにすることです。

于 2009-08-24T09:04:16.007 に答える