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 :

appel pointeur sur fonction dans DLL


Sujet :

Windows

  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2005
    Messages : 391
    Points : 301
    Points
    301
    Par défaut appel pointeur sur fonction dans DLL
    j ai le header suivant pour acceder à ma dll

    pour l utiliser j inclu le header

    puis je fais appel a la fct Sensor2USB_InitSystem
    il me clac une exception read error 0

    normal je pense car la fct est un pointeur et a priori
    tant que je ne fait pas

    Sensor2USB_InitSystem = &mafct ca ne peut pas marcher?

    comment faire pour utiliser cette dll svp je rame a mort

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #ifndef _UBOXAPI_H_
    #define _UBOXAPI_H_
     
    #define	microBox_BIT                    0
    #define microBox_VOLT                   1
     
    #include "windows.h"
     
    //Controll Functions
    int (*Sensor2USB_InitSystem)(void);
    int (*Sensor2USB_CloseSystem)(void);
    int (*Sensor2USB_GetDeviceNumber)(void);
    int (*Sensor2USB_GetDLLVersion)(char* DLLversion);
    int (*Sensor2USB_GetFirmwareVersion)(int deviceNumber, char *fwVersion);
    int (*Sensor2USB_GetSerialNumber)(int deviceNumber,char *serialNumber);
    //Setting Functions
    int (*Sensor2USB_ChannelConfiguration)(int deviceNumber,BYTE enable_ch0,unsigned short int gain_ch0, BYTE range_ch0, BYTE resolution_ch0, BYTE enable_ch1, unsigned short int gain_ch1, BYTE range_ch1, BYTE resolution_ch1, BYTE enable_ch2,unsigned short int gain_ch2, BYTE range_ch2, BYTE resolution_ch2,BYTE enable_ch3, unsigned short int gain_ch3, BYTE range_ch3, BYTE resolution_ch3, BYTE enable_ch4);
    //RealTime Functions
    void (*Sensor2USB_EnableRealTime)(void);
    void (*Sensor2USB_DisableRealTime)(void);
    int (*Sensor2USB_GetRealTimeSampleBufferVOLT)(int deviceNumber,DWORD MAX_SIZE,float *Ch0, float *Ch1, float *Ch2,float *Ch3, float *Ch4, DWORD *ch0_size, DWORD *ch1_size, DWORD *ch2_size,DWORD *ch3_size, DWORD *ch4_size,BYTE *digitalInputValue, unsigned int *pounterValue);
    int (*Sensor2USB_GetRealTimeSampleBufferBIT)(int deviceNumber,DWORD MAX_SIZE,unsigned int *Ch0, unsigned int *Ch1, unsigned int *Ch2,unsigned int *Ch3, unsigned int *Ch4,DWORD *ch0_size, DWORD *ch1_size, DWORD *ch2_size,DWORD *ch3_size,DWORD *ch4_size,BYTE *digitalInputValue, unsigned int *pounterValue);
    //Digital inputs: digital input & counter
    int (*Sensor2USB_GetDigitalInputs) (int deviceNumber, BYTE *digitalInputValue, unsigned int *counterValue);
    //Analog output
    int (*Sensor2USB_SetAnalogOutput) (int deviceNumber, WORD analogOutputValue);
    //Digital outputs
    int (*Sensor2USB_SetDigitalOutput) (int deviceNumber, BYTE digitalOutputNumber, BYTE valueOutput);
    #endif

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce problème concerne la DLL en question, pas le langage C.

    Je ne connais absolument pas cette DLL, mais ça me parait bizarre, un header comme ça qui déclare juste des pointeurs de fonction en variables globales...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    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
    Oui il faut initialiser tes pointeurs de fonctions.

    Comment tu charges ta dll ? Tu as le .lib ? Dynamiquement ?
    " 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 ]

  4. #4
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2005
    Messages : 391
    Points : 301
    Points
    301
    Par défaut
    lors de l appel de

    int (*Sensor2USB_GetRealTimeSampleBufferVOLT)(int deviceNumber,DWORD MAX_SIZE,float *Ch0, float *Ch1, float *Ch2,float *Ch3, float *Ch4, DWORD *ch0_size, DWORD *ch1_size, DWORD *ch2_size,DWORD *ch3_size, DWORD *ch4_size,BYTE *digitalInputValue, unsigned int *pounterValue);

    en vb je met comme declaration

    Declare Function Sensor2USB_GetRealTimeSampleBufferVOLT Lib "c:\microbox\se2usbapi.dll" (ByVal nbr As Long, ByVal tampon As Long, ByVal ch0 As Long, _
    ByVal ch1 As Long, ByVal ch2 As Long, ByVal ch3 As Long, ByVal ch4 As Long, ByVal ch0size As Long, ByVal ch1size As Long, _
    ByVal ch2size As Long, ByVal ch3size As Long, ByVal ch4size As Long, ByRef Diginpval As Byte, ByRef compteur As Long)

    est ce bon?


    pour l appel je fais

    a = Sensor2USB_GetRealTimeSampleBufferVOLT(ByVal nbr, ByVal tampon, ByVal VarPtr(ch0(0)), ByVal VarPtr(ch1(0)), ByVal VarPtr(ch2(0)), ByVal VarPtr(ch3(0)), ByVal VarPtr(ch4(0)), ByVal VarPtr(ch0size(0)), ByVal VarPtr(ch1size(0)), _
    ByVal VarPtr(ch2size(0)), ByVal VarPtr(ch3size(0)), ByVal VarPtr(ch4size(0)), Diginpval, compteur)

    est bon?

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    1-les balises de code cela sert à quelque chose parce que c'est extrêmement brouillon on ne comprend rien à ce que tu écris
    2-By Val en VB dans une fonction c'est passer des paramêtres par valeur.
    Essayer avec By Ref convention de passage par défaut ou rien du tout
    By Ref équivaut à un passage de pointeur du C

  6. #6
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2005
    Messages : 391
    Points : 301
    Points
    301
    Par défaut
    lorsque l on passe un tableau en en ref ou val c est pareil

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Je n'arrive pas trop à piger le projet : il y a un client en VB5/6 et une dll développée en C/C++ ?

    Regarder d'une part si les types sont compatibles ; pas dit que DWORD soit équivalent sous VB.
    Chercher sur www.codeproject.com il ya un article qui traite de ça.

    Pour remédier aux problèmes VB/dll en C/C++ je conseille vivement de faire une dll ATL-COM plutot qu'une dll "classique" qui s'interfacera mieux avec VB.
    Un composant ATL-COM c'est prévu pour s'interfacer avec différents langages et les types de donnée sont alignés quelque soit le langage( pourvu que celui-ci utilise COM ).
    Une appli VB est mieux gérée avec un composant ATL-COM.

    Une dll "classique" avec DllMain c'est plus une biblio d'extension d'un programme développé en C/C++...

Discussions similaires

  1. APPEL D'UNE FONCTION DANS DLL
    Par mulfycrowh dans le forum C++
    Réponses: 4
    Dernier message: 20/04/2010, 12h34
  2. Réponses: 3
    Dernier message: 24/04/2007, 16h48
  3. [ARM] Appel d'une fonction dans une dll
    Par mosfet dans le forum Autres architectures
    Réponses: 3
    Dernier message: 28/03/2007, 08h15
  4. [VB6] Appel d'une fonction dans un module d'une dll
    Par speedster dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/06/2006, 17h37
  5. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 12h58

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