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

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)
{
...
}
fichier.h
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);
Comme vous pouvez le remarquer il n'utilise pas stdcall, ce qui ne me facilite pas la tache.
Quand j'essaye d'appeler cette fonction j'ai ce beau message d'erreur :

Nom : MVCDL.JPG
Affichages : 71
Taille : 22,5 Ko

-----------------------------------------------------------------------

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