我有一个三层应用程序:
- 一个托管的C#层。
- 一个托管的C++/CLI层。
- 一个非托管的C++层。
第二层作为C#和本地C++之间的通信层使用。
public class ManagedResult
{
public float[] firstArray;
public float[] secondArray;
}
和未管理的类
class UnmanagedResult
{
public:
float* firstArray, secondArray;
int arrayLength;
UnmanagedResult(){};
~UnmanagedResult(){};
}
我在第二层中有以下一个类的方法,其输出一个托管对象:
ManagedResult^ CLIContext::GetResults(){
ManagedResult^ primitiveResult = gcnew ManagedResult();
pin_ptr<int> pFirst = &(primitiveResult->firstArray[0]);
pin_ptr<float> pSecond = &(primitiveResult->secondArray[0]);
UnmanagedResult result =UnmanagedResult();
result.firstArray = pFirst;
result.secondArray = pSecond;
_context->GetResults(result);
return primitiveResult;
}
在这里,_context是一个未受管理的类类型对象,它操作一个UnmanagedResult类型的对象并影响其内容。
这个解决方案很好用。但我希望能够通过引用传递对象,并且使用第三方API来分配和填充firstArray
和secondArray
的两个成员。
那么,如何将数据从未受管理的结果转移到primitiveResult中呢?