IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Utilisation fonction définie dans un .Dll


Sujet :

Windows

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Utilisation fonction définie dans un .Dll
    J'ai une question concernant l'appel d'1 fonction définie dans un fichier .dll:
    Conformément à MSDN, voici la syntaxe utilisée:

    typedef BOOL (CALLBACK* USB_WriteFile)(PVOID,DWORD,LPDWORD,ULONG);

    HINSTANCE hDLL;
    hDLL = LoadLibrary("XtlUsb.dll");
    USB_WriteFile pUSB_WriteFile;

    PVOID lpBuffer;
    DWORD nNumberOfBytesToWrite;
    LPDWORD lpNumberOfBytesWritten;
    ULONG Timeout;

    if (hDLL != NULL)
    {
    pUSB_WriteFile = (USB_WriteFile)GetProcAddress(hDLL,"USB_WriteFile");
    if (!pUSB_WriteFile)
    {
    FreeLibrary(hDLL);
    return FALSE;
    }
    else
    {
    BOOL BResult = TRUE;
    BResult = pUSB_WriteFile(lpBuffer,nNumberOfBytesToWrite,lpNumberOfBytesWritten,Timeout);
    }
    }

    A la compilation, je n'ai aucune erreur. A l'exécution, j'ai une erreur fatale lors de l'appel de ma fonction "USB_WriteFile" par le pointeur "pUSB_WriteFile".

    Des idées sur ce problème rencontré?

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    pUSB_WriteFile = (USB_WriteFile)GetProcAddress(hDLL,"USB_WriteFile");

    essai plutot :

    pUSB_WriteFile = (USB_WriteFile*)GetProcAddress(hDLL,"USB_WriteFile");

    Le CALLBACK est il vraiment necessaire ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    je ne la trouve pas ds le msdn cette fonction, pas plus que la dll.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Pourquoi il aurait pas pu ecrire une DLL ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    l'erreur vient du CALLBACK * qui est à remplacer par la définition exacte de ma fonction càd
    typedef BOOL (__cdecl *USB_WriteFile)(PVOID,DWORD,LPDWORD,ULONG);

    Merci pr vos infos

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    CALLBACK = __stdcall = convention d'appel différente de __cdecl
    Normal que ça plante

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Utiliser les fonctions contenues dans une DLL écrite en VB.NET
    Par vg-matrix dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/11/2012, 23h35
  2. utilisation d'une fonction contenue dans une DLL
    Par granbapt dans le forum Visual C++
    Réponses: 4
    Dernier message: 08/06/2012, 13h13
  3. Réponses: 2
    Dernier message: 14/02/2011, 19h30
  4. Réponses: 7
    Dernier message: 25/11/2005, 17h11
  5. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo