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

MFC Discussion :

[MFC] DLL et notifications d'événements


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut [MFC] DLL et notifications d'événements
    Bonjour ^^

    J'ai créé un programme de transferts de données par réseau qui fonctionne grace aux fonctions OnReceive et OnAccept. Ce programme fonctionne très bien mais je dois en faire une librairie.
    Malheureusement, le OnAccept n'a pas l'air d'etre réveillé par une notification quelconque de Windows.

    Est-ce que les DLL prennent aussi en charge les notifications d'événements ou je dois trouver autre chose?

    Merci d'avance ^^

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    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 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Tu l'utilises comment cette dll ? Depuis une appli MFC ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Oui, tout est MFC.

    L'appli est une dialog based, les notifications devraient se faire par cette appli normamlement mais ça ne se fait pas...

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    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 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Tu compiles pour utiliser les MFC en tant que dll ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Je ne sais pas trop, je ne sais pas où vérifier ces options là, je ne connais pas très bien les MFC ^^"

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Personne ne sait comment vérifier dans les options si MFC est bien pris en charge?

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Project --> settings --> General --> Microsoft Fondation Classes et tu regardes le contenu de la combo.

    Sinon, pour ton problème, tu as évalué le comportement de la méthode FireEvent ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Merci pour ton aide. Mon projet utilise les MFC avec shared DLL. Je ne comprends vraiment pas le problème...

    Non pas du tout, je suis loin d'être callée en c++ donc je ne sais pas très bien comment débugguer un programme, je ne connaissais pas cette méthode-là.

    Je regarde à l'instant meme comment l'utiliser.


    Par contre, je me demandais comment vérifier si l'application était liée à certaines dll comme mfc42.dll ou autre, je ne trouve ça nulle part dans les options...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Option de la DLL :

    - MFC AppWizard(dll)
    - MFC Extension DLL (avec windows sockets)


    Option de l'application client :

    - MFC AppWizard(exe)
    - Dialog Based(avec windows sockets)
    - MFC Standard as a Shared DLL


    Et je mets la DLL et l'application en debug multithread DLL

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu utilises quoi les classes MFC CSocket ?
    a priori je ne vois pas de probleme dans ce contexte .

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Oui, j'ai créé une classe Connection dérivée de CSocket, et deux autres classes (Client et Server) dérivées elles de la classe Connection.

    Est-ce la "double" dérivation qui poserait problème?

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    donc la socket serveur est en mode listen .
    l'initialisation est bien faite ?
    comment tu distingues la socket client du serveur .
    a savoir sur la demande de connexion d'un client la creation du client ..

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Oui oui, l'initialisation est bien faite. En fait, si j'appelle explicitement le OnAccept, il fonctionne très bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void CDialogDLLDlg::OnConnecter() 
    {
        Client *connect;
        connect = new Client();
        connect->Connect("172.16.34.140",4148);	
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void CDialogDLLDlg::OnDemarrer() 
    {
    //   Connection connect;
         Server *connects;
         connects = new Server();
         connects->Listen(4148);		
    }

    Et dans la DLL j'ai deux classes bien distinctes.

  14. #14
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    hum ce que je ne vois pas dans ton code c'est l"acceptation de la connexion cliente:
    moi je verrais un truc du style:serveur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void CListeningSocket::OnAccept(int nErrorCode)
    {
     Client *pconnect;
     pconnect = new Client; 
     Accept(*pconnect);
    }
    appeler sur la fonction OnAccept de la socket et ou CListeningSocket represente ta socket serveur d'ecoute.


  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Mais le OnAccept est sensé se déclencher automatiquement non?
    J'ai le meme problème avec le OnReceive, ce qui est plus problématique vis-à-vis de ce que je dois faire de la DLL.


    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
    void Server::OnAccept(int nErrorCode)
    {
    	CSocket::OnAccept(nErrorCode);
    	CSocket clientSock;
    	TRACE("AcceptProcess\n");	
    	if (serverSock.Accept(clientSock))
    	{
     
    		TRACE("Connexion");
    		//C'est juste pour vérifier si le OnAccept est bien appellé
    	}
    	else
    	{
    		TRACE("Accept raté\n");
    	}
    }
    J'ai ceci dans ma fonction OnAccept.

  16. #16
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    oui ,
    mais tu ne peux faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CSocket clientSock;
       TRACE("AcceptProcess\n");   
       if (serverSock.Accept(clientSock))
    l'objet client va etre detruit en sortant de sa portée ,ici la fonction OnAccept
    tu as tracé OnDemarrer() ?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Le OnDemarrer est un fonction de l'application cliente, j'ai tracé le Listen qui est bien appellé.
    Ce que je ne comprends pas c'est qu'en appellant le OnAccept juste après le Listen, tout ce passe bien mais pas quand j'ai besoin qu'il se déclenche tout seul

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Hum bon,comme quoi je suis vraiment nulle en c++, en fait c'est le socket serveur qui n'a pas une portée suffisante, il faut que je refasse toute l'architecture de classe, mais comme je suis pas douée, je suis pas prête de réussir XD


    Merci beaucoup pour votre aide, je cherchais l'erreur au mauvais endroit, j'étais pas prete de trouver :/

  19. #19
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    vu comme ça effectivement ça ne risque pas de fonctionner ,
    n'oublie pas de cloturer ce thread par le bouton resolu ,si c'est ok .

    j'ai lu tes problemes de performance dans tes posts precedents .
    essaye de mettre ce parametre au niveau de la socket cliente ,coté client et serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    long one=1;
    mysocket.SetSockOpt(TCP_NODELAY,(char *)&one,sizeof(one),IPPROTO_TCP))

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Merci, effectivement c'était bien ça le problème, c'est donc résolu ^^


    Je vais essayer ces options, merci beaucoup ^^

    Edit : Je ne comprends pas très bien ce qu'est le "one"

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

Discussions similaires

  1. [MFC]+[dll] probleme au linkage
    Par BainE dans le forum MFC
    Réponses: 3
    Dernier message: 22/06/2005, 12h04
  2. [MFC] DLL avec boite de dialogue
    Par ricky78 dans le forum MFC
    Réponses: 2
    Dernier message: 17/06/2005, 12h06
  3. [MFC][DLL]Dialog Avec ActiveX dans une DLL ?
    Par matazz dans le forum MFC
    Réponses: 1
    Dernier message: 16/05/2005, 16h36
  4. Réponses: 18
    Dernier message: 13/04/2005, 15h46
  5. [MFC][DLL]Afficher une CDialog ?
    Par matazz dans le forum MFC
    Réponses: 13
    Dernier message: 13/04/2005, 13h47

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