Hallo...
ich habe eine externe DLL (kleines C++ Programm (Unmanaged) ) in meinem C# Projekt integriert.
Klappt auch soweit ganz gut, jetzt das Problem.
Wie übergebe ich ein 2 Dimensionales double Array (double[][] tmp) an die DLL Funktion.
Ich bekomme folgende Exception:
System.Runtime.InteropServices.MarshalDirectiveException
Additional information: Can not marshal parameter #3: Invalid managed/unmanaged type combination (Arrays can only be marshaled as Array or SafeArray).
Jetzt zur Frage:
Wie erstelle ich ein SafeArray in C#, wie ich es in C++ wieder auslese müsste ich eigentlich hinbekommen.
Schon mal danke für die mühen.
Zweidimensionale Felder werden nicht durch das Marshalling unterstützt. Im Speicher wird aber ein zweidimensionales Feld als eindimensionales Feld ablegegt (nm). Genauso musst du es auch übergeben (MarshallAs.LpArray mit SizeConst = mn).
schon mal danke für die schnelle antwort.
hab jetzt alles in nem 1D Feld drin.
Wie bekomme ich jetzt genau das 1D Feld an die DLL geschickt.
so sieht die dll funktion aus:
[DllImport("mydll.dll")]
static extern int avSendData(int rows,int cols,double[] data);
so meine funktion
int ret = avSendData(rows,cols,1DFeld);
was muss ich da jetzt genau mit der Marshal Funktion machen?
Ein MarshallAs.LpArray gibt es bei mir nicht?
nur, Marshal, MarshalAsAttribute, MarshalBy..., usw. keine hat eine LpArray Methode
Danke
Für ein 3x3-Feld müßte das so gehen:
[DllImport("mydll.dll")]
static extern int avSendData(int rows,int cols,[MarshalAs(UnmanagedType.LPArray, SizeConst=9)] double[] data);