Bonjour A tous,
J'ai besoin de votre aide. Pourriez vous m'aider s'il vous plait ?
Je vous explique :
J'ai repris un code qui initialement en C++ non managé fait appel à une DLL elle non plus non managé. J'ai les sources des 2 (programme + DLL) et je dois passé le programme en C# et pas la DLL (je peux néanmoins modifier la DLL pour l'adapter si besoin).
Le source fait appel à une fonction de la dll en lui passant un tableau de caractère que la fonction doit retourner rempli (il est utilisé dans la DLL en tant que char*[10]). Le passage se fait par un pointeur char *.
Et la je me retrouve coincé. Comment puis récupérer mon tableau de char.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 //Programme C++ { char *pTest[10]; for (i=0; i<10; i++) pTest[i] = (char *)malloc(100); m_test->foo((char *)pTest); } //DLL C++ int fooclass::foo(char *pDevList) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) char **pDeviceList = (char **)pDevList; RempliTableau(pDeviceList); }
J'ai utilisé des string en C# et wchar_t * en passage de paramêtre mais soit j'ai un pb de mémoire soit ce que je récupere n'ai pas bon ou les 2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 //Programme C# { string[] Device = new string[100]; [DllImport("fooDll.DLL", EntryPoint = "?foo@fooclass@@QAEHQAPA_W@Z", CharSet = CharSet.Auto)] public static extern int foo([In ,Out] String[] pDevList); public void test() { foo(Device); } } //DLL C++ //.h class __declspec(dllimport) fooClass { public: int foo (wchar_t *pDevList[100]); } //.cpp int fooClass::foo(wchar_t *pDevList[100]) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString pDeviceList[100]; wchar_t **pDevListLocal; pDevListLocal = (wchar_t **)pDevList; for (i=0; i<100; i++) { pDevListLocal[i] = (wchar_t *)malloc(1000); mbstowcs(pDevListLocal[i],"\0",1); }
Si jusqu'à la fin de la fonction foo de la DLL ça se passe bien, le retour de la fonction est problematique.
1- il ne peut pas me retourner un tableau de 100 string? complet (il plante pour un pb mémoire)
2- Ce que je récupere ne correspond pas au niveau caractère à ce que je dois avoir...
Est ce quelqu'un aurait une idée et me donner un petit coup de pouce s'il vous plait ?
Merci d'avance.
Devajax13
Partager