0

後でC++CLIで使用されるC#のインターフェイスを設計しようとしています。

C#インターフェイスを実装するC ++ CLIクラスには、反復可能なプロパティのようなリストが必要です。このクラスは実際にはネイティブのラッパーです(完全な詳細が必要な場合は、ビューポートのリストを持つOgre RenderWindowオブジェクトへのポインターが含まれ、各ビューポートアイテムはgetViewport(int index)と呼ばれるRenderWindowプロパティを介して簡単にアクセスできます) 。

目標は、インターフェイスとこのインターフェイスのC ++ CLI実装にプロパティを設定して、for each構成で使用できるようにすることです。これを行うための最もクリーンな方法は何でしょうか?

議論されたアイテムのいくつかのスニペット:

C#インターフェース

public interface IRenderWindow
    {
         bool IsActive { get; set; }
    }

そしてC++CLI実装者

public ref class CLIOgreRenderWindow : public IRenderWindow
        {
        private:
            Ogre::RenderWindow * mRenderWindow;
        public:
            CLIOgreRenderWindow();

            virtual property bool IsActive 
            {
                bool get() sealed {return mRenderWindow->isActive();}
                void set(bool value) sealed { mRenderWindow->setActive(value); }
            }
        }
4

1 に答える 1

2

あなたの質問を正しく理解できれば、ビューポートのリストを公開したいと思うでしょう。その場合は、次のことができます。

  1. ネイティブ Viewport オブジェクトのラッパー ref クラスを作成します (CLIOgreRenderWindow.
  2. IRenderWindow で getter を使用して IEnumerable を公開します。
  3. C++/CLI 実装では、(ネイティブ オブジェクトに基づいて) ラッパー オブジェクトのマネージド配列/リストを作成し、それを返すことができます。

上記の項目 #3 は、要件に応じて別のことを行うことができる場所です (つまり、一度に 1 つの結果を生成するために IEnumerable を実装できますが、それは少し手間がかかります)。

于 2012-06-22T17:04:12.610 に答える