C# et Dll non managé : passage de tableau de caractère
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:
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:
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