Salut à tous,
Je souhaite placer certaines de mes fonctions dans une dll pour pouvoir les réutilisé dans plusieurs programmes. Je programme en C sous Windows XP SP2.
Donc dans Code::Blocks je crée un nouveau projet dll. Je place mes fonctions dans le fichier main.c de ce projet:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT
#endif
void affiche() {
printf("Hello world");
}
int calcule(int a, int b) {
int m = a+b;
return m;
}
Je crée un fichier madll.def contenant:
LIBRARY madll ;Nom de la DLL
CODE PRELOAD OVEABLE DISCARDABLE
DATA PRELOAD SINGLE
EXPORTS
affiche ;Nom des fonctions de la DLL
calcule ;Nom des fonctions de la DLL
Donc je compile ce projet, pas de problème. Ca me crée aussi un .a mais je ne pense pas en avoir besoin puisque je veux une librairie dynamique et non statique.
Ensuite pour utiliser la dll je vais dans le projet de mon programme. Dans mon main.c je met:
int main() {
HINSTANCE DLLHandle;
typedef char (*PointeurFonctionType)();
PointeurFonctionType PointeurFonction;
DLLHandle = LoadLibrary("madll.DLL");
PointeurFonction = (PointeurFonctionType)GetProcAddress(DLLHandle,"affiche");
PointeurFonction();
return 0
}
Et donc là la console devrait afficher un jolie "Hello world", mais non. A la place j'ai l'horrible fenêtre de windows ma demandant si je veux envoyer un rapport d'erreur.
Alors après de long moments de recherches sur le net (jusqu'à la 12è pages de google quand même) je m'en remet à vous. Merci d'avance