il faut pas que tu linke via une .lib qui appelle la Dll ?
(du moins, j'ai l'impression que c comme ça que marche Allegro qd on veut faire une version en linkage dynamique)
mais quel .lib ??? parceque j'ai ma dll mais c'est tout ...
Tu peux charger ta librairie pendant l'exécution, avec LoadLibray, GetProcAddress et FreeLibrary.
Mais la meilleure solution est créer le .lib : créer un DLL bidon. Je l'ai déjà fait plusieurs fois, mais c'est assez lnog à expliquer.
JM Le 12/10/2002 à 13:26Edité par JM le 12/10/2002 à 13:38 faudrait donc que je crée une lib .lib fictive avec les renvoies GetProcAdress etc. ?
Non, il n'y a plus de GetProcAdress ou autre si tu recrée ton .lib.
Ce que donne Kevin Kofler a l'air de marcher.
Ma méthode consistait à écrire un libbz2.dll bidon, qui a l'apparence du vrai libbz2.dll depuis un programme externe.
Je l'ai fait pour pouvoir utiliser la compression/décompression cab dynamiquement, via cabinet.dll plutôt que les librairies statiques fci.lib et fdi.lib. VC6 ne proposait pas du tout la compression cab et le cab-sdk ne fournissaient que fci.h, fci.lib, fdi.h et fdi.lib. Pour créer cabinet.lib, j'ai fait ça :
- créer un projet DLL du nom de "cabinet"
- créer cabinet.c avec :
#include <windows.h>
#include <fci.h>
#include <fdi.h>
- créer cabinet.def avec :
LIBRARY CABINET
EXPORTS
FCIAddFile
FCICreate
FCIDestroy
FCIFlushCabinet
FCIFlushFolder
FDICopy
FDICreate
FDIDestroy
FDIIsCabinet
Ce n'est pas un très bon exemple, parce qu'il me semble que pour créer le dll, j'ai inclus les librairies statiques, ce qui revenait à réécrire le vrai cabinet.dll, mais j'y suis déjà arrivé pour un autre dll donc je ne me rappelle plus le nom.
JM Le 12/10/2002 à 13:42Edité par JM le 12/10/2002 à 14:44 Pour l'autre dll, j'avais peut être fait des fonctions vides.
Il faut aussi faire attention à la décoration des noms des fonctions que tu veux utiliser.
Et le .def n'est pas toujours nécessaire.