我不是一個真正的CS人,所以如果你們中的任何一位天才都能指引我走向正確的方向,我會永遠感激。float * from C to C#
我有一個c代碼命令行函數,用於將其結果寫入文件。我將它轉換到經由浮子*陣列返回它的數據到像這樣(以避免恆定文件I/O)C++程序:
float * mgrib(int argc, char **argv)
這完美地工作。我現在需要把它變成一個C#程序,這裏是事情發生的地方。
我爲避免char **所做的第一件事是將參數設置爲一系列布爾值。如果我允許它仍然轉儲到文件,那工作正常。
問題是在C#中雜耍C風格的浮動數組。在c代碼中,它被分配了malloc。
因此,這裏的一切,我沒有成功嘗試(我知道數組的大小):
做一個「免費」的功能,以出口從C#打電話的時候我來釋放內存米做完了。幾次循環後,C#崩潰,沒有任何警告。
從Marshal.FreeCoTaskMem的C#發佈malloc。同樣的結果。
將float *移動到參數並移除c代碼malloc。 (void mgrib(...,float * data,...)
__a)將其與Marshal.AllocCoTaskMem一起分配。用Marshal.FreeCoTaskMem免費。
__b)使用Marshal.Copy分配。免費與Marshal.FreeCoTaskMem它(也許這是錯的?)
我已經涉足了我可以在互聯網上找到的一切。如果需要更多信息,請讓我知道。我希望這只是一個簡單的概念,我錯過了。
忘了C語言,寫一個乾淨的用C#。而是返回一個浮點數組(float [])。 – stefan 2011-03-08 18:30:41
請發佈您的C#代碼 – 2011-03-08 18:39:09
您是否試圖做到這一點,或容易嗎?簡單的方法是將兩個程序幾乎保持完好,但通過管道而不是文件進行通信。要做得好,你最好用一種語言編寫整個程序。 – 2011-03-08 19:12:29