2009-11-13 71 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 [] [],如示例中所示。