2

状況は次のとおりです。

C/C++ で記述されたアンマネージ ライブラリがあり、CLR でこれらの関数と構造体にアクセスしたいのですが、ネストされたオブジェクトの基本的なアクセサーを記述するのに問題があります。これらの構造体がこれらのライブラリでどのようにレイアウトされるかの例を次に示します。

struct MyObjectUnmanaged
{
    SurfaceUnmanaged s;
    ...
}

struct SurfaceUnmanaged
{
   int numPoints;
   double *gridz;
   ....
}

MyObjectUnmanaged にはネストされた複数の構造体があり、SurfaceUnmanaged のような構造体にもネストされたオブジェクトがあります。ユーザーは、これらの構造体にメモリを割り当てることもできる必要があります。

アンマネージ ライブラリでは、ユーザーは MyObjectUnmanaged のインスタンスを作成し、必要な各メンバーを手動で変更します。ユーザーは、ネストされたオブジェクトのメンバーにもアクセスし、それらの値も設定します。最後に、MyObjectUnmanaged のインスタンスへのポインターが静的関数に渡され、そこで再度変更されます。

MyObjectUnmanaged のマネージ ラッパーは次のとおりです。

public ref class MyObjectWrapperManaged  
{
    private:
    MyObjectUnmanaged *o

    public:
    MyObjectWrapperManaged(){ o  = new MyObjectUnmanaged();}

// How should I write the accessors,properties
// or functions to modify objects nested within o?

   void SetNumPointsForSurface(int numPts); // accessors like this seem inefficient and 
                                            // gratiutous especially if there 
                                            // are a lot of members to access and modify

}

SurfaceUnmanaged のマネージド ラッパーを作成する必要がありますか? もしそうなら、それらは MyObjectWrapperManaged のパブリック メンバーでしょうか、それともプロパティとアクセサーは架空の SurfaceManaged クラスの新しいインスタンスを返すだけでしょうか? クライアントが SurfaceUnmanaged にアクセスしてトップ レベルからメモリを割り当てる最善の方法は何ですか?

4

0 に答える 0