|
|
|
|
Bonjour,
j'aimerais utiliser la DLL de xvid (xvidcore.dll)
j'ai bien compris comment charger la DLL:
HINSTANCE hDLL=LoadLibrary("xvidcore.dll");
et récupérer l'adresse de la fonction :
void *pxvid_global=GetProcAddress(hDLL,"xvid_global");
dans les entêtes xvid.h j'ai ça :
extern int xvid_global(void *handle, int opt, void *param1, void *param2);
maintenant comment appeler cette fonction naturellement ?
genre : xvid_global(0,XVID_GBL_INIT,xinit,0);
en attendant j'utilise ça :
__asm
{
push 0
push xinit
push XVID_GBL_INIT
push 0
call pxvid_global
}
doit avoir plus propre non ?
merci de votre aide !!!
(C++ visual studio 2005)
Bonjour,
typedef int xvid_global_func(void *, int, void *, void *); Variable: pointeur sur une fonction de type xvid_global_func. xvid_global_func *pxvid_global = (xvid_global_func*) GetProcAddress(hDLL,"xvid_global"); ou alors... tout d'un coup pour éviter de déclarer le type pour une initialisation... (Moi je préfère déclarer le type...) int (*pxvid_global)(void *, int, void *, void *) = (int (*)(void *, int, void *, void *)) GetProcAddress(hDLL,"xvid_global"); Après l'une ou l'autre méthode: if ( pxvid_global != NULL ) int returnedValue = pxvid_global( pouet, pouat, pouit, pouot ); Quand j'ai à faire ce genre de chose je fais une grosse fonction d'initialisation pour toutes les fonctions d'une dll pour mettre à jour des pointeurs de fonctions globaux et faire les vérification, après il n'y a ainsi plus qu'à utiliser les pointeurs comme des fonction normales. M. |