2010-09-12 43 views
2

我有一个本机C/C++结构cli/C++如何用非托管类型元素定义cli :: array?

typedef struct 
{ 
... 
} AStruct; 

和在C++/CLI代码我限定一个代表和一个CLI数组如下

public delegate void UpdateDataDelegate(AStruct% aSt,AStruct% bSt); 

cli::Array<AStruct>^ args=gcnew cli::Array<AStruct>(2); // complile failed!!!!。 

this->Invoke(updateData,args); 

AStruct具有许多领域和使用由许多模块所以如果我不喜欢为AStruct编写一个包装好的包装,如何让上面的代码工作?

许多感谢

+0

是什么了updateData?为什么UpdateDataDelegate接受两个AStruct参数,并尝试创建AStruct数组? – 2010-09-12 12:27:21

+0

使用本地容器(例如'std :: vector')来存储原生数据有什么问题? – 2010-09-12 17:28:02

回答

4

托管数组的元素类型必须是管理型。一个解决办法是存储指针:

array<AStruct*>^ args=gcnew array<AStruct*>(2); 
args[0] = new AStruct; 
// etc... 

UpdateDataDelegate^ dlg = gcnew UpdateDataDelegate(Mumble); 
dlg->Invoke(*args[0], *args[1]); 
+0

感谢Hans Passant 我会试试你的解决方法。 – Biwier 2010-09-12 14:15:57

+0

更好:它必须是托管类型*或原始类型*。这就是为什么指针是被允许的。 – 2010-09-12 17:26:48

+0

指针是托管类型。 – 2010-09-12 17:35:34

相关问题