Ma question concerne l'appel d'une fonction écrite en C à partir de C#. J'ai regardé dans un fichier d'en-tête fourni avec la bibliothèque C pour comprendre les fonctions telles qu'elles existent dans la DLL C. Voici ce que je vois:Comment mapper un tableau C en C#?
code C (pour une fonction appelée "LocGetLocations"):
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
);
En C#, j'ai ceci:
[DllImport(@"VertexNative\Location.dll")]
public static extern uint LocGetLocations(IntPtr findContext, out byte[] locations, uint numberLocations, out int status);
Le problème est que je ne sait très bien comment gérer le paramètre pLoc en C#. Je l'apporte comme un tableau d'octets, même si je ne suis pas sûr que ce soit correct. La documentation de la bibliothèque C indique que ce paramètre est un pointeur vers un tableau de poignées.
Comment puis-je récupérer un tableau du côté C# et accéder à ses données?
L'exemple m'a donné en C, ressemble à ceci:
tLocation lLocation[20];
// other stuff
LocGetLocations(lCtx, lLocation, 20, &lStatus)
Toute aide serait très apprécié!
Si c'est un tableau de poignées, vous voudrez en faire un tableau de 'IntPtr'. –
Voir http://pinvoke.net/index.aspx pour beaucoup d'exemples. –