Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Appeler une fonction d'une dll depuis un c

5 réponses
Avatar
Bruno Guerpillon
Bonjour

J'ai cherché un peu partout mais sans succès (les exemples trouvés
concernent du c++ en général).

J'ai une DLL d'un client avec le prototype d'une fonction dans la DLL.
La question est : comment appeler cette fonction depuis un C (pas C++) ?

L'autre question : est-il possible d'appeler cette fonction depuis un C sur
un serveur Unix ?

Merci

Bruno

5 réponses

Avatar
jacob navia
Bonjour

J'ai cherché un peu partout mais sans succès (les exemples trouvés
concernent du c++ en général).

J'ai une DLL d'un client avec le prototype d'une fonction dans la DLL.
La question est : comment appeler cette fonction depuis un C (pas C++) ?

L'autre question : est-il possible d'appeler cette fonction depuis un C sur
un serveur Unix ?

Merci

Bruno




Utilise LoadLibrary pour charger la dll, et apres
GetProcAddress pour retrouver l'addresse. Apres just:

result=fn(arg1,arg2);

Avatar
Bruno Guerpillon
Bonjour Jacob

Merci de ta réponse.
Je suis un total débutant en C mais d'après ta réponse, j'ai fais des
recherches sur LoadLibrary et j'ai trouvé un exemple très interessant.

http://perso.orange.fr/philippe.baucour/pratiquer/dynamicload/dynamicload.htmlSur un serveur Unix, si les 2 fichiers (.c et .dll) sont dans le mêmedossier, l'appel + execution + retour valeur de la fonction marchera-t-il ?Je ferais le test rapidementEn tout cas merciCordialementBruno"jacob navia" a écrit dans le message de news:4565844b$0$5081$ Bruno Guerpillon a écrit :>> Bonjour>>>> J'ai cherché un peu partout mais sans succès (les exemples trouvésconcernent du c++ en général).>>>> J'ai une DLL d'un client avec le prototype d'une fonction dans la DLL.>> La question est : comment appeler cette fonction depuis un C (pas C++) ?>>>> L'autre question : est-il possible d'appeler cette fonction depuis un Csur un serveur Unix ?>>>> Merci>>>> Bruno>> Utilise LoadLibrary pour charger la dll, et apres> GetProcAddress pour retrouver l'addresse. Apres just:>> result=fn(arg1,arg2);
Avatar
Bruno Guerpillon
Bonjour

Je répond en partie à ma question après des recheches.
Une DLL est vraiment spécifique à Windows.
Pour *nix, il faut utiliser soit des librairies dynamiques (lib*.so) soit
statiques (lib*.a)

Bruno


"Bruno Guerpillon" a écrit dans le message de news:
4565871a$0$1989$
Bonjour Jacob

Merci de ta réponse.
Je suis un total débutant en C mais d'après ta réponse, j'ai fais des
recherches sur LoadLibrary et j'ai trouvé un exemple très interessant.

http://perso.orange.fr/philippe.baucour/pratiquer/dynamicload/dynamicload.htmlSur
un serveur Unix, si les 2 fichiers (.c et .dll) sont dans le mêmedossier,
l'appel + execution + retour valeur de la fonction marchera-t-il ?Je
ferais le test rapidementEn tout cas merciCordialementBruno"jacob navia"
a écrit dans le message de
news:4565844b$0$5081$ Bruno Guerpillon a écrit
:>> Bonjour>>>> J'ai cherché un peu partout mais sans succès (les exemples
trouvésconcernent du c++ en général).>>>> J'ai une DLL d'un client avec le
prototype d'une fonction dans la DLL.>> La question est : comment appeler
cette fonction depuis un C (pas C++) ?>>>> L'autre question : est-il
possible d'appeler cette fonction depuis un Csur un serveur Unix ?>>>>
Merci>>>> Bruno>> Utilise LoadLibrary pour charger la dll, et apres>
GetProcAddress pour retrouver l'addresse. Apres just:>>
result=fn(arg1,arg2);



Avatar
Bruno Guerpillon
Bonjour à tous

Toujours en train de me battre avec ma DLL
La fonction est tres simple :

Fonction(chaine : char) : char

On l'appele normalement par res=Fonction("texte")

Et je n'arrive pas à recuperer l'info (que du Char)
Quelqu'un aurait-il un exemple simple ou un lien sur ce sujet ?
J'ai cherché mais sans succès

Merci

bruno


"Bruno Guerpillon" a écrit dans le message de news:
45657e6e$0$31658$
Bonjour

J'ai cherché un peu partout mais sans succès (les exemples trouvés
concernent du c++ en général).

J'ai une DLL d'un client avec le prototype d'une fonction dans la DLL.
La question est : comment appeler cette fonction depuis un C (pas C++) ?

L'autre question : est-il possible d'appeler cette fonction depuis un C
sur un serveur Unix ?

Merci

Bruno



Avatar
Bruno Guerpillon
Bonjour

Dans le code suivant, j'aimerai utiliser une dll (cypher.dll) pour crypter
un mot de passe et récupérer le mot de passe crypter.
Hors ça ne fonctionne pas, une idée ?

#include <windows.h>
#include <string.h>
#include <stdio.h>
// typedef int __stdcall (*FCTX)(char *aChaine);
typedef char (*FCTX)(char*);
// const char* __stdcall (*FCTX)(char *aChaine);
#define FUNCTION_NAME "Cypher"
#define MODULE_NAME "cypher.dll"

int main (int argc, char *argv[]) {
// static char ModPath[255]="C:WINDOWSSYSTEM32";

FCTX Fn_Ptr;
HMODULE ModId;
char passwd;

// strcat(ModPath, MODULE_NAME);
// ModId = LoadLibrary(ModPath);
ModId = LoadLibrary(MODULE_NAME);
Fn_Ptr = (FCTX)GetProcAddress(ModId, FUNCTION_NAME);
passwd = Fn_Ptr("motdff");
FreeLibrary(ModId);
printf ("Après appel de la fonction dans le module, le status = %sn",
passwd);
printf ("Appuyez sur une touche :");
getchar();
return 0;
}



"Bruno Guerpillon" a écrit dans le message de news:
45657e6e$0$31658$
Bonjour

J'ai cherché un peu partout mais sans succès (les exemples trouvés
concernent du c++ en général).

J'ai une DLL d'un client avec le prototype d'une fonction dans la DLL.
La question est : comment appeler cette fonction depuis un C (pas C++) ?

L'autre question : est-il possible d'appeler cette fonction depuis un C
sur un serveur Unix ?

Merci

Bruno