1 pièce(s) jointe(s)
Probleme d'appel d'une dll, sans lib et sans stdcall
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:
1 2 3 4
| __declspec(dllexport) void fct_main(long * l_a, char * c_b, char * c_c, char * c_d)
{
...
} |
fichier.h
Code:
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 :
Pièce jointe 17134
-----------------------------------------------------------------------
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:
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:
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