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:
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:
Um an den Struct über Marsahaling zu kommen:
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
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;
}
Code:
IntPtr cPointObjectPtr = CFunction(); // Declared via P/Invoke
PointObject pntObj = new ShapeLib.PointObject();
Marshal.PtrToStructure(cPointObjectPtr, pntObj);
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