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