Bonjour,
J'ai un peu cherché dans la faq mais je n'ai rien trouvé qui puise m'aider.
Je dois utiliser une fonction d'une dll non managée. La déclaration de cette fonction comprend des pointeurs.
Dans mon code c#, j'ai fais (dans une classe marquée unsafe):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 MADLL_API int __stdcall dllGetInfo(const char* filename, char* pszFirstname, int nFirstnameLen, int* pnRaceId, double* pDateOfBirth);
Pour l'utiliser, j'écris
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 static extern int dllGetInfo(string filename, string pszFirstname, int nFirstnameLen, int* pnRaceId, double* pDateOfBirth);
(ne cherchez pas le pourquoi des tableaux surdimensionnés, j'ai juste épuré le code pour enlever les doublons inutiles)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 String[] st = new String[4] { "".PadLeft(1000), "".PadLeft(1000), "".PadLeft(1000), "".PadLeft(1000) }; int*[] itp = new int*[6]; double dd = 0.0; double* d = ⅆ int r = dllGetInfo(@"Monfichier.truc", st[0], 1000, st[1], 1000, itp[1], d);
L'appel de la fonction se fait sans erreur mais ne me renvoie rien dans mes variables. Alors je me dis que je n'ai pas du écrire ça correctement.
J'ai tenté de mettre un ref devant les chaines mais là, je ramasse une erreur de tentative d'écriture dans une zone mémoire protégée.
Est-ce vous voyez une erreur la-dedans ?
Merci d'avance du coup d'oeil
Papy
Partager