Bonjour à tous,
J'ai un problème qui traine depuis plusieurs jours et c'est pas faute d'avoir essayer tout et n'importe quoi pour remédier à cela mais toujours rien.
Je m'explique j'ai besoin de faire appel à une fonction C d'un programme extérieur au mien (C#).
Je me suis donc dis qu'il fallait que je fasse une dll ou j'exporte ma fonction C de telle sorte qu'elle puisse être utilisable sur mon code C# (si il y a un autre moyen je veux bien le connaitre ).
Le problème c'est que ma fonction C utilise des char * en entrée et sortie.
Voici comment j'ai exporté ma fonction C :
Et voici comment j'utilise tout ca en C#
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 extern "C" __declspec(dllexport) char * func(char *pwd)
J'ai eu le droit à une erreur m'indiquant que il ne trouvait pas le point d'entrée, j'ai donc lancé un dumpbin dans une fenetre prompt visual pour vérifier que j'exporte bien ma fonction voici ce que j'ai eu :
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 [DllImport("func.dll", CharSet = CharSet.Auto, SetLastError = true, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr func(StringBuilder pwd); ... StringBuilder pass = new StringBuilder(sclient.pass); IntPtr lpStrRet = Marshal.AllocHGlobal(256); lpStrRet = func(pass); if (lpStrRet.ToInt32() == 0) throw new Exception("lpStrRet NULL"); string hashedpwd = Marshal.PtrToStringAuto(lpStrRet); Marshal.FreeHGlobal(lpStrRet); Console.WriteLine("ret func C : " + hashedpwd);
j'ai donc rajouté un paramètre EntryPoint=func dans le dllimport
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 File Type: DLL Section contains the following exports for func.dll .. 1 ordinal base 1 number of functions 1 number of names ordinal hint RVA name 1 0 00011113 func = @ILT+270(_func)
et j'ai changé ma fonction C# en _func et la du coup j'ai un message d'erreur qui me dit "L'accès à cet emplacement de la mémoire n'est pas valide. (Exception de HRESULT)".
Je n'ai donc plus vraiment d'idées sur quoi faire pour remédier à cela si quelqu'un en a une vraiment je suis preneur!
Merci à tous et bonne journée
Partager