Wie kann ich ein 2D-Array von einer C-Dll nach C# marshal'en?

VooDooTom

Grünschnabel
Hallo,

ich hab schon recht lange versucht eine Lösung zu finden aber hab bisher noch keinen Weg gefunden mein Problem zu klären - ich nutze das .Net Compact Framwork 2.0 aber denke dass die Marshal-Klassen genauso sind wie im "normalen" .Net 2.0

Hier ist mein Problem:

Ich habe eine C-Dll geschrieben welche mir ein 2D-Array von Punkten berechnet welches wiederum Teil eines structs ist:
Code:
typedef struct tagPointObject
{
int **x;
int **y;
double scale;
int nSHPType; 
int partCount;
} PointObject;

Ich rufe eine C-Funktion dieser Dll aus C# auf welche mir ein solches Point-Object zurückliefert. Durch das .Net Marshaling ist es mir Möglich an alle Sachen des Structs zu kommen bis auf die Arrays - sicherlich sind die IntPtr's die ersten Einträge der jeweiligen Arrays:

Die C#-Side siehr so aus:
Code:
[StructLayout(LayoutKind.Sequential)]
public struct PointObject
{

public IntPtr x;
public IntPtr y;
public double scale;
public ShapeType shpType;
public int partCount;
}
Um an den Struct über Marsahaling zu kommen:
Code:
IntPtr cPointObjectPtr = CFunction(); // Declared via P/Invoke
PointObject pntObj = new ShapeLib.PointObject();
Marshal.PtrToStructure(cPointObjectPtr, pntObj);
Ich kenne die Länge der "äußeren" Arrays und ich weiß wie viele Einträge gesamt in den Arrays sind - "blöderweise" sind die (inneren) Listen (als Elemente des äußeren Arrays) aber variabel in ihrer Länge (es ist also praktisch kein Matrix-Array)

So nun die offensichtliche Frage: Wie komme ich denn aus C# an das Array? Es ist wichtig dass die einzelnen Listen in ihrer Reihenfolge erhalten bleiben.

Vielen Dank im voraus :)
Tom Kazimiers
 
Zurück