2009-11-13 70 views
3

我有一个数组,我想传入一个DLL的数组。我遇到了错误“没有对嵌套数组的支持。”将数组数组传递给C#中的DLL的安全方法是什么?

我可以通过一个单一的数组,但如果我堆叠它失败。我需要/想要一个传递数组数组的“安全”方式。

private static extern int PrintStuff(string[][] someStringsInGroups, int numberOfGroups, int[] lengthSetsInGroups); 

编辑:我也愿意,有足够的灰心和痛苦,接受涉及编组的解决方案。

回答

1

您可以将double数组转换为单个数组(即将其平铺)。这可以通过保持宽度和高度的变量,以及访问所述索引作为这样来完成:

string atXY = someStringsInSingleArray[(y * width) + x]; 

然后该阵列可被转化为,例如:

string * array = new string[width * height]; 

for (unsigned int y = 0; y < height; ++y) 
{ 
    for (unsigned int x = 0; x < width; ++x) 
    { 
     array[(y * width) + x] = someStringsInGroups[x][y]; 
    } 
} 

// (pass single array to dll) 

delete [] array; 
+0

为了概括这个想法,你可以把你的二维数组放入任何可串行化的形式 - 比如一维数组,甚至是一个字符串。 – 2009-11-13 22:29:00

+0

我已经在int数组中对一些数据进行了序列化,甚至在C++端进行了一些strut转换,以便您可以读取将数据分配给(o [i] .value v.s. o [i] [7])的内容。当一个字符串被传递给一个DLL时,它会在它的尾部被一个Null封送。如果我将其序列化,那么我的自我必须添加这些内容。这并不是什么大不了的事情,但代码就像是让我周围的技术人员感到不安。另一个要求是所有的代码在C#中都是“安全的”。另一个解决方案是实际地武装数据manully :( – QueueHammer 2009-11-13 23:06:32

0

我对面什么可能不如绊倒安全但速度快很多,因为只有指针被分配。

http://www.mycsharp.de/wbb2/thread.php?threadid=82380

它是在德国,但在页面代码到底是准备复制/粘贴。在我的例子中,我只是让类通用,不仅支持双打。

请注意,我不知道字符串[] [],因为我会假设将字符串编组为char *,因此您将使用char [] [] *而不是double [] [],如示例中所示。