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

C++ Discussion :

DLL avec paramètres


Sujet :

C++

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut DLL avec paramètres
    Bonjour à tous,

    J'ai un problème lors de la création d'une DLL. J'écris le code ci-dessous pour que se soit plus simple à comprendre.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    IFHw * g_pSmt351=0;
    int flag_cross=0;
    int Delta_Cross=20;
    int Mean_ROI_display = 0;
    int Mean_ROI_lum = 5000;
    int Border_Cross_display = 0;
    int Border_Cross_lum =10000;
    int Center_Cross_display = 0;
    int Center_Cross_lum = 7000;
     
     
    static void HandleKeyboard(CImgDisplay & display)
    {
     
    	if(display.is_event && display.is_key())
    	{
     
    		if(display.is_keyPADADD) 
    		{
    			printf("Cross display mode \n");
    			Center_Cross_display =!Center_Cross_display;
    			Border_Cross_display =!Border_Cross_display;
    			flag_cross=1;
    		}	
     
    		if(display.is_keyPADSUB) 
    		{
    			printf("Mean ROI display mode \n");
    			Mean_ROI_display =!Mean_ROI_display;
    			flag_cross=1;		
    		}	
     
    	}
     
    }
     
    void display_cross_roi(void)
    {
    	if (flag_cross)
    	//display cross and Roi on request
    	{
    		reg_proc_write(26,(Delta_Cross<<16 | Mean_ROI_display<<15)|(Mean_ROI_lum<<0), g_pSmt351); // Centered ROI  display and delta between crosses
    		reg_proc_write(27,(Border_Cross_display<<31)|(Border_Cross_lum<<16)|(Center_Cross_display<<15)|(Center_Cross_lum<<0), g_pSmt351); // Center and Border Cross display
    	}
    }
    Je souhaite passer la fonction void display_cross_roi(void) sous forme de DLL. Je ne sais pas à quel endroit et comment je dois initialiser les variables (à l'intérieur de la DLL, en dehors, sous forme de paramètres?). J'ai essayé de différente manière mais je pense que je ne rentre jamais dans la boucle
    if (flag_cross)
    //display cross and Roi on request
    {
    reg_proc_write(26,(Delta_Cross<<16 | Mean_ROI_display<<15)|(Mean_ROI_lum<<0), g_pSmt351); // Centered ROI display and delta between crosses
    reg_proc_write(27,(Border_Cross_display<<31)|(Border_Cross_lum<<16)|(Center_Cross_display<<15)|(Center_Cross_lum<<0), g_pSmt351); // Center and Border Cross display
    }
    car je ne détecte pas le passage à 1 de flag_cross.

    Pouvez-vous m'aider ?

    Je vous remercie par avance.

    Karen.

  2. #2
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    bonjour,

    es-tu sûre que HandleKeyboard() est effectivement appelé ?

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    Ce code fonctionne et réalise ce que je souhaite cependant dès que je met la fonction void display_cross_roi(void) sous forme de DLL ça ne fonctionne plus mais vu que je n'ai rien modifié au niveau de HandleKeyboard() je pense que oui.
    (Je ne sais pas si j'ai répondu à la question.)

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ce que je ferais d'instinct, c'est passer à ta fonction un pointeur de classe abstraite, dont les fonctions virtuelles permettent de récupérer les valeurs voulues.
    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.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    Merci pour votre réponse mais étant encore débutante je ne comprend pas exactement ce qu'il faut faire pouvez-vous m'expliquer un peu plus en détail s'il vous plait?

    Merci d'avance.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'ai peut-être parlé un peu vite, en fait. Où est appelé display_cross_roi?
    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.

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    A l'intérieur du main dans une fonction while(!stop_all)
    Est-ce suffisant comme réponse?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pas sûr, mais en tout cas on ne va pas y couper: Il faut que la fonction (ou son appelant, qui pourrait lui passer en paramètre) ait accès à une structure de données qui contient l'état dont la fonction à besoin; et qui est mise à jour par HandleKeyboard().

    On a donc ici, au minimum, un modèle et une vue; la vue doit pouvoir consulter le modèle. La façon traditionnelle, c'est de faire cela via une interface (l'équivalent en C++ étant des classes abstraites dont toutes les fonctions sont virtuelles), héritée par le modèle et appelée par la vue pour obtenir les données.
    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.

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    D'accord je vais essayer de voir comment faire ça.

    Merci pour vos réponses.

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    J'ai essayé de comprendre ce que je devais faire et pour l'instant j'ai compris qu'il faudrait que je crée une classe abstraite comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class cross{
    virtual void affiche()=0;
    int flag_cross;
    };
    Mais ensuite à quel moment je l'introduit dans mon code et comment?

  11. #11
    Membre éclairé
    Homme Profil pro
    Cocher moderne
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Oman

    Informations professionnelles :
    Activité : Cocher moderne

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Par défaut
    Salut,

    Pourrais-tu présenter ton code avec d'un côté l'interface et de l'autre le code exécutable de la DLL? C'est pour une utilisation statique ou partagée?

    Si tout ça n'est pas clair,
    la page FAQ qui va bien

    Bon courage,

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    Alors voici l'interface sans classe abstraite ou autre, la fonction display_cross_roi est simplement appelée dans le main :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    IFHw * g_pSmt351=0;
    int flag_cross=0;
    int Delta_Cross=20;
    int Mean_ROI_display = 0;
    int Mean_ROI_lum = 5000;
    int Border_Cross_display = 0;
    int Border_Cross_lum =10000;
    int Center_Cross_display = 0;
    int Center_Cross_lum = 7000;
     
     
    static void HandleKeyboard(CImgDisplay & display)
    {
     
    	if(display.is_event && display.is_key())
    	{
     
    		if(display.is_keyPADADD) 
    		{
    			printf("Cross display mode \n");
    			Center_Cross_display =!Center_Cross_display;
    			Border_Cross_display =!Border_Cross_display;
    			flag_cross=1;
    		}	
     
    		if(display.is_keyPADSUB) 
    		{
    			printf("Mean ROI display mode \n");
    			Mean_ROI_display =!Mean_ROI_display;
    			flag_cross=1;		
    		}	
     
    	}
     
    }
     
    void display_cross_roi(void)
    {
    	if (flag_cross)
    	//display cross and Roi on request
    	{
    		reg_proc_write(26,(Delta_Cross<<16 | Mean_ROI_display<<15)|(Mean_ROI_lum<<0), g_pSmt351); // Centered ROI  display and delta between crosses
    		reg_proc_write(27,(Border_Cross_display<<31)|(Border_Cross_lum<<16)|(Center_Cross_display<<15)|(Center_Cross_lum<<0), g_pSmt351); // Center and Border Cross display
    	}
    }
    Et voici le code exécutable de la DLL avec comme problème la déclaration des variables :
    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
     
    #define DllExport _declspec(dllexport)
     
    int Delta_Cross=20;				// delta between crosses
    int Mean_ROI_lum = 5000;		// mean area over brithness value (bits 0 à 13 de reg_proc 26)
    int Border_Cross_lum =10000;	// cross over brithness value (bits 16 à 29 de reg_proc 27)
    int Center_Cross_lum = 7000;	// cross over brithness value (bits 0 à 13 de reg_proc 27)
    int Mean_ROI_display=0;
    int Border_Cross_display=0;
    int Center_Cross_display=0;
     
    void DllExport display_cross_roi(int flag_cross, IFHw * g_pSmt351)
    {
    	if (flag_cross)
    	//display cross and Roi on request
    	{
    		reg_proc_write(26,(Delta_Cross<<16 | Mean_ROI_display<<15)|(Mean_ROI_lum<<0), g_pSmt351); // Centered ROI  display and delta between crosses
    		reg_proc_write(27,(Border_Cross_display<<31)|(Border_Cross_lum<<16)|(Center_Cross_display<<15)|(Center_Cross_lum<<0), g_pSmt351); // Center and Border Cross display
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define DllImport _declspec(dllimport)
     
    void DllImport display_cross_roi(int flag_cross, IFHw * g_pSmt351);
    Je vous remercie par avance.

Discussions similaires

  1. wxWidgets 2.6.4 et DLL avec paramètres
    Par carreau dans le forum wxWidgets
    Réponses: 1
    Dernier message: 13/11/2008, 14h20
  2. DLL avec paramètres CString et String en .net
    Par basnifo dans le forum C++/CLI
    Réponses: 3
    Dernier message: 25/09/2008, 19h45
  3. charger une DLL avec paramètres
    Par cyberchand dans le forum C#
    Réponses: 6
    Dernier message: 29/05/2007, 16h28
  4. Réponses: 4
    Dernier message: 09/02/2006, 16h22
  5. [VB6]appel de dll en C avec paramètres
    Par SerLab dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/02/2006, 14h49

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