我不是一个真正的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