Bonjour,
Voila je vous explique mon problème, je dois utiliser des dlls que me fourni une société, mais juste des dlls pas de .lib ni de .o.
J'ai quand même réussi à obtenir le code source mais je ne peu pas les modifier, ni les recompiler.
Voila un bout de ce qui m'es fournit :
fichier.c
fichier.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 __declspec(dllexport) void fct_main(long * l_a, char * c_b, char * c_c, char * c_d) { ... }
Comme vous pouvez le remarquer il n'utilise pas stdcall, ce qui ne me facilite pas la tache.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 extern void fct_main(long * l_a, char * c_b, char * c_c, char * c_d);
Quand j'essaye d'appeler cette fonction j'ai ce beau message d'erreur :
-----------------------------------------------------------------------
Apres coup j'ai effectué des tests en créant une dll.
Pour la tester j'ai crée ce petit bout de code :
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
43
44
45 #include "stdafx.h" #include <windows.h> #include <string.h> #include <stdio.h> typedef void (__stdcall *FCTX1)(int a); typedef void (__stdcall *FCTX2)(char * a); typedef void (__stdcall *FCTX3)(int * a); typedef void (CALLBACK *FCTX4)(long *a); int main(int argc, char* argv[]) { FCTX1 E_int; FCTX2 E_p_char; FCTX3 es_p_int; FCTX4 es_p_long; HMODULE ModId; HMODULE ModIdd; ModId = LoadLibrary("C:\\WINDOWS\\SYSTEM32\\test_dll_simple.dll"); E_int = (FCTX1)GetProcAddress(ModId, "E_int"); E_p_char = (FCTX2)GetProcAddress(ModId, "E_p_char"); es_p_int = (FCTX3)GetProcAddress(ModId, "es_p_int"); es_p_long = (FCTX4)GetProcAddress(ModId, "es_p_long"); char b[255] = "216"; char bb[255] = "3000001"; char bbb[255] = ""; int c = 999; int * d = &c; long e = 98788; long * f = &e; E_p_char(b); E_int(256); es_p_int(d); es_p_long(f); printf(" %d\n",*d); printf(" %d\n",*f); FreeLibrary(ModId); return 0; }
pour ma dll de test :
Les 3 premières fonctions marche bien, mais la 4eme ou j'ai enlevé __stdcall ne fonctionne toujours pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 __declspec (dllexport) void __stdcall E_int(int entree); __declspec (dllexport) void __stdcall E_p_char(char *entree); __declspec (dllexport) void __stdcall es_p_int(int *entree); __declspec(dllexport) void es_p_long(long *entree);
J'ai essayé plein de méthodes différentes, je vous avoue que je ne sais plus trop quoi essayer, et je me demande même si c'est possible d'effectuer ces actions.
Si quelqu'un à une idée ou une piste je suis preneur
Partager