Ich bin nicht wirklich ein CS-Typ, wenn also einer von euch Genies hier mich in die richtige Richtung weisen kann, werde ich ewig dankbar sein.
Ich habe eine C-Code-Befehlszeilenfunktion, die ihre Ergebnisse in eine Datei schreiben soll. Ich habe sie so konvertiert, dass sie ihre Daten über ein float*-Array an ein C++-Programm wie dieses zurückgibt (um ständige Dateieingabe und -ausgabe zu vermeiden):
float * mgrib(int argc, char **argv)
Das hat perfekt funktioniert. Ich muss nun diese in ein C#-Programm zu bekommen, und hier ist, wo die Dinge gehen haywire.
Das erste, was ich tat, um die char ** zu vermeiden, war, die Argumente eine Reihe von bool zu machen. Das funktionierte gut, wenn ich zulasse, dass es immer noch in eine Datei ausgegeben wird.
Das Problem ist das Jonglieren der C-Stil Float-Array in C #. Innerhalb des C-Codes wurde es mit malloc zugewiesen.
Also hier ist alles, was ich versucht habe, ohne Erfolg (ich kenne die Größe des Arrays):
-
Machen Sie eine "free"-Funktion zu exportieren, um von C # aufrufen, um den Speicher freizugeben, wenn ich mit ihm fertig bin. Nach ein paar Schleifen stürzt die C# ohne Warnung.
-
Lösen Sie das malloc von C# mit Marshal.FreeCoTaskMem auf. Gleiches Ergebnis.
-
Verschiebt den Float* in ein Argument und entfernt den C-Code malloc. (void mgrib(..., float* Daten,...)
__a)Weisen Sie es mit Marshal.AllocCoTaskMem zu. Geben Sie es mit Marshal.FreeCoTaskMem frei.
__b)Verwenden Sie Marshal.Copy zum Zuweisen. Freigeben mit Marshal.FreeCoTaskMem (Vielleicht ist das falsch?)
Ich habe mich mit so ziemlich allem beschäftigt, was ich im Internet finden konnte. Bitte lassen Sie mich wissen, wenn mehr Informationen erforderlich sind. Ich hoffe, dass dies nur ein einfaches Konzept, das ich bin fehlt.