Meine Frage hat damit zu tun, eine in C geschriebene Funktion von C# aufzurufen. Ich habe in einer Headerdatei gesucht, die mit der C-Bibliothek geliefert wurde, um die Funktionen zu verstehen, die in der C-DLL vorhanden sind. Hier ist, was ich sehe:Wie wird ein C-Array zu C# zugeordnet?
C-Code (für eine Funktion "LocGetLocations" genannt):
typedef enum {
eLocNoError,
eLocInvalidCriteria,
eLocNoMatch,
eLocNoMoreLocations,
eLocConnectionError,
eLocContextError,
eLocMemoryError
} tLocGetStatus;
typedef void *tLocFindCtx;
typedef void *tLocation;
PREFIX unsigned int POSTFIX LocGetLocations
(
tLocFindCtx pCtx,
tLocation *pLoc,
unsigned int pNumLocations,
tLocGetStatus *pStatus
);
In C#, ich habe dies:
[DllImport(@"VertexNative\Location.dll")]
public static extern uint LocGetLocations(IntPtr findContext, out byte[] locations, uint numberLocations, out int status);
Das Problem ist, dass ich nicht weiß ziemlich genau wie man mit dem pLoc Parameter in C# umgeht. Ich bringe es als Byte-Array mit, obwohl ich mir nicht sicher bin, ob das korrekt ist. Die Dokumentation der C-Bibliothek besagt, dass dieser Parameter ein Zeiger auf ein Array von Handles ist.
Wie kann ich ein Array zurück auf der C# -Seite bekommen und auf seine Daten zugreifen?
Das Beispiel, das ich in C gegeben wurde, sieht wie folgt aus:
tLocation lLocation[20];
// other stuff
LocGetLocations(lCtx, lLocation, 20, &lStatus)
Jede Hilfe wäre sehr willkommen!
Wenn es sich um ein Array von Handles handelt, sollten Sie es zu einem Array von 'IntPtr' machen. –
Siehe http://pinvoke.net/index.aspx für viele Beispiele. –