Mehrdimensionales Array von c++ dll an c# schicken
-
Hallo,
ich möchte ein zweidimensionales Array von einer c++ dll an ein c# App schicken.
C# übergibt zunächst ein zweidimensionales Array mit Daten, die in der Dll verarbeitet werden und die Dll soll die verarbeiteten Daten wieder zurück schicken.
Hat da jemand eine Idee?Gruß
-
Wenn das zweidimensonale Array als [X][Y] vorliegt, so ist es ja kein Problem, da man dieses auch als 1-dimensionales Array [X*Y] betrachten kann.
(s. dazu auch die Marshal-Klasse im .NET-Framework).Hast du dagegen ein Jagged-Array (so wird es in C# genannt), d.h. ** bzw. *[X](also dynamisch angelegt), so ist es nicht direkt möglich, da ja kein zusammenhängender Speicherbereich vorliegt.
-
Vielen Dank für schnelle Antwort. Ich habe nun einmal in der MSDN gelsen, bin mir aber noch nicht absolut sicher wie ich das mit dem Marshal verstehen soll.
hier der Code meiner c++ DLL:
extern "C" __declspec(dllexport)void InputPBM(char inputData[][69], char outputData[][69], int algorythm, long col, long row, char& str);...
void InputPBM(char inputData[][69], char outputData[][69], int algorythm, long col, long row, char& str){
...
}in meiner C# App versuche ich dann outputData zu verwenden:
[DllImport("ImageAnalyse.dll")]
private static extern void InputPBM(char[,] inputData, out char[,] outputData, int algorythm, int col, int row, out string str);...
char[,] outBild;
char str;
InputPBM(bild, out outBild, 0, 69, 69, out str);nach diesem Methodenaufruf bekomme ich immer den Fehler: "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
-
http://www.codeplex.com/clrinterop/Release/ProjectReleases.aspx?ReleaseId=14120
http://blogs.msdn.com/bclteam/archive/2008/06/23/p-invoke-interop-assistant-justin-van-patten.aspx
-
Very good site. Thanks!!,