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 *.

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);
}
Et la je me retrouve coincé. Comment puis récupérer mon tableau de char.
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