OVH Cloud OVH Cloud

Utiliser une DLL

2 réponses
Avatar
Bruno Guerpillon
Bonjour

Tout d'abord, je suis un novice en c, C++ etc.

Un client m'a remis une dll qui contient une fonction permettant de crypter
un mot de passe.
On passe un Char à la fonction et cela renvoi un Char.
Jusque la rien de compliqué. Hors je n'arrive pas à le faire fonctionner

Apres plusieurs jours (oui!) de recherche infructueuse, je me tourne vers ce
NG.
J'aimerai faire cela en C / C++

Le code suivant est tiré de Win32.hlp et il plante lamentablement.
Une idée pour l'adapter de façon à envoyer un char et recupérer le char de
la fonction ?



Voici le dernier code que j'ai :

#include <stdio.h>
#include <windows.h>

typedef VOID (*MYPROC)(LPTSTR);

VOID main(VOID) {
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

/* Get a handle to the DLL module. */

hinstLib = LoadLibrary("madll.dll");

/* If the handle is valid, try to get the function address. */

if (hinstLib != NULL) {
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "mafonction");

/* If the function address is valid, call the function. */

if (fRunTimeLinkSuccess = (ProcAdd != NULL))
(ProcAdd) ("message via DLL function\n");
printf("ProcAdd = %i",ProcAdd);
/* Free the DLL module. */

fFreeResult = FreeLibrary(hinstLib);
}
/* If unable to call the DLL function, use an alternative. */
if (! fRunTimeLinkSuccess)
printf("message via alternative method\n");
}


Cordialement

Bruno

2 réponses

Avatar
Patrick Philippot
Bonjour,

On passe un Char à la fonction et cela renvoi un Char.



Alors le prototype que vous indiquez dans l'exemple ne correspond pas. A
moins que vous ne parliez de char*. Mais de toute façon votre prototype
décrit une fonction qui retourne VOID, pas une chaîne de caractères.

typedef VOID (*MYPROC)(LPTSTR);



Plutôt

typedef LPSTR (*MYPROC)(LPTSTR);

Non? Ou alors l'argument est de type in/out: la chaîne est modifiée in situ?


La DLL vient certainement avec un fichier include. Peut-on le voir?

Le code suivant est tiré de Win32.hlp et il plante lamentablement.



Où? Comment? Quel message d'erreur? Nous ne pouvons pas vous aider si vous
ne nous donnez pas les infos nécessaires. On ne le répètera jamais assez:
"Ça ne marche pas." n'est pas une information utile :-)) .

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Patrick Philippot
Bonjour,

On passe un Char à la fonction et cela renvoi un Char.



Alors le prototype que vous indiquez dans l'exemple ne correspond pas. A
moins que vous ne parliez de char*. Mais de toute façon votre prototype
décrit une fonction qui retourne VOID, pas une chaîne de caractères.

typedef VOID (*MYPROC)(LPTSTR);



Plutôt

typedef LPSTR (*MYPROC)(LPTSTR);

Non? Ou alors l'argument est de type in/out: la chaîne est modifiée in situ?


La DLL vient certainement avec un fichier include. Peut-on le voir?

Le code suivant est tiré de Win32.hlp et il plante lamentablement.



Où? Comment? Quel message d'erreur? Nous ne pouvons pas vous aider si vous
ne nous donnez pas les infos nécessaires. On ne le répètera jamais assez:
"Ça ne marche pas." n'est pas une information utile :-)) .

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr