情况如下:
我有一个非托管库用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以从顶层分配内存的最佳方式是什么?