0

C#でインターフェイスを定義しています。例:

[ComVisible(true), Guid("E37EBA3C-FB2E-4D4A-8A90-F6FAA99E85C9")]
public interface TestClass
{
    public void test_function();
}

これをIDLのライブラリ定義に含めたいと思います。C#インターフェイスから.tlbを生成し、importlibに含めることで、これを実現しようとしました。ただし、idlファイルをコンパイルすると、ライブラリにこのインターフェイスが表示されませんが、idlファイルをインポートしてこのライブラリで定義した他のすべてのインターフェイスが表示されます。

import "AnotherClass.idl"
library COMMONPROGRAMS{
    importLib(stdole32.tlb)
    importLib(stdole2.tlb)
    importLib(TestClass.tlb)

    interface TestClass;
    interface AnotherClass;
}

要約すると、私は知りたいです:

  • IDLライブラリにC#インターフェイスを含めることは可能ですか?
  • もしそうなら、どうすればこれを行うことができますか?

すべての回答を歓迎します。ご回答ありがとうございました。

4

1 に答える 1

1

TLB をインポートするとimportlib、現在の TLB にインターフェイスが含まれていないため、それらのインターフェイスは表示されません。これらのインターフェイスはTestClassタイプ ライブラリで既に定義されているため、ライブラリで別の定義を持つことはできませんCommonPrograms

インターフェイスを別の場所で定義したいが、それを TLB の一部にしたい場合は、 でインポートする必要がありますimport TestClass.idl。TLB から IDL を生成する 1 つの方法は、OLE/COM オブジェクト ビューアで TLB を開いて を選択File->Save Asし、編集することです。ほとんどの場合、この手順を自動化したいので、これはあなたが望んでいるものではないと思います。

ただし、 CommonPrograms 型からimportlib引き続きインターフェイスを参照できるTestClassため、これは通常大きな障害にはなりませんが、明らかに要件によって異なります。

于 2012-09-20T12:52:49.040 に答える