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

Visual C++ Discussion :

Erreur lier � un static std::queue


Sujet :

Visual C++

  1. #1
    Membre confirm� Avatar de awesomeman
    Homme Profil pro
    �tudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Par d�faut Erreur lier � un static std::queue
    Bonjour,

    Je cr�er une classe KeyLoger qui utilise SetWindowsHookEx, celle ci a besoin d'une fonction ou d'une m�thode static pour sa callback (2i�me arg), voil� ce que ca donne :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    KeyLoger::KeyLoger()
    {
    	HHOOK KeyBoard = SetWindowsHookEx(WH_KEYBOARD_LL, &KeyLoger::KeyboardEvent, NULL, NULL);
    	HHOOK Mouse = SetWindowsHookEx(WH_MOUSE_LL, &KeyLoger::MouseEvent, NULL, NULL);
    }
    je dois utiliser une queue � l'int�rieur de cette CallBack, le probl�me c'est que celle ci doit �tre d�clar� en static �galement ..
    et c'est la que je me prends deux belles erreurs, ce qui est normal puisqu'une m�thode statique n'a pas pour but d'acc�der aux attribut de la classe, voici les erreurs :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    LNK2001	symbole externe non résolu "private: static class std::queue<struct s_Keys,class std::deque<struct s_Keys,class std::allocator<struct s_Keys> > > KeyLoger::Keys" (?Keys@KeyLoger@@0V?$queue@Us_Keys@@V?$deque@Us_Keys@@V?$allocator@Us_Keys@@@std@@@std@@@std@@A)
    et

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    LNK1120	1 externes non résolus
    voil� ma classe :

    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
    typedef struct s_Keys
    {
    	int		Key;
    	bool	Ctrl = FALSE;
    	bool	Alt = FALSE;
    	bool	Shift = FALSE;
    	bool	Maj = FALSE;
    	bool	Altgr = FALSE;
     
    	int		PosX;
    	int		PosY;
     
    	int		timestamp;
    }t_Keys;
     
    class KeyLoger
    {
    public:
    	KeyLoger();
    	~KeyLoger();
     
    	static LRESULT CALLBACK KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam);
    	static LRESULT CALLBACK MouseEvent(int nCode, WPARAM wParam, LPARAM lParam);
    	static std::queue<t_Keys> GetKeys();
     
    	HHOOK KeyBoard;
    	HHOOK Mouse;
     
    private:
    	static std::queue<t_Keys> Keys;
    	static bool KeyIsPut();
    };

    et voil� comment j'utilise l'une des CallBack :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    LRESULT CALLBACK KeyLoger::KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam)
    {
    	PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
    	std::string str;
    	t_Keys		UltiKey;
    /*...............................................*/
            Keys.push(UltiKey);
    		}
    	}
    	return CallNextHookEx(NULL, nCode, wParam, lParam);
    Vu que je suis oblig� d'utiliser mes Callback en statique, comment es ce que je peux acc�der � mes attributs sans casse ..?
    Je ne vois plus trop vers quoi chercher ...

    dites moi si vous voulait des infos en plus !
    Merci pour votre aide

  2. #2
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 505
    Par d�faut
    ce qui est normal puisqu'une m�thode statique n'a pas pour but d'acc�der aux attribut de la classe, voici les erreurs :
    Bin non, si l'attribut est static, rien n'emp�che son acc�s par une m�thode statique.

    Ne pas confondre d�claration et d�finition.
    https://stackoverflow.com/questions/...private-static

  3. #3
    Membre confirm� Avatar de awesomeman
    Homme Profil pro
    �tudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Par d�faut
    Oui, sauf que j'obtiens l'erreur quand mon attribut Queue est en static ..
    Et puis j'aimerai bien utiliser la Queue dans une instance de ma classe, pas dans ma classe elle meme, Ce qui est impossible (je crois ?) dans une m�thode static puisque celle ci ne fait r�f�rence � aucun objet .

  4. #4
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 505
    Par d�faut
    Oui, sauf que j'obtiens l'erreur quand mon attribut Queue est en static ..
    Ne pas confondre d�claration et d�finition.(BIS)
    https://stackoverflow.com/questions/...private-static

    Et puis j'aimerai bien utiliser la Queue dans une instance de ma classe, pas dans ma classe elle meme, Ce qui est impossible (je crois ?) dans une m�thode static puisque celle ci ne fait r�f�rence � aucun objet .
    Vous ne g�rez qu'un clavier et une souris, je ne vois pas l'int�r�t de votre fixette sur les instances, vu que cela serait plus proche du singleton qu'autre chose.
    C++ est multi-paradigme, il n'est pas qu'objet.
    Donc pour vous enquiquiner avec des instances de classe ???

    Si vous deviez g�rer des trucs comme plusieurs claviers et faire des distinctions entre eux, etc ..., il est coutume de passer dans le param�tre "UserData" de la fonction d�enregistrement de callback un pointeur sur l'objet.
    Dans la fonction libre enregistr�e en tant que callback, vous r�cup�rez ce param�tre "UserData" que vous castez dans le type que vous utilisez, et vous pourrez appeler la ou les m�thodes d'instance � partir de l'objet "r�cup�r�" apr�s le cast.

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Au passage, les keyloggers ne vont-ils pas � l'encontre de la charte du forum?
    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.

  6. #6
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    La std::queue<> est static, donc une fonction static peut tout � fait acc�der.
    L'erreur ici vient du fait que la std::queue<> est d�clar�e mais jamais d�finie. Il faut mettre dans un cpp :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::queue<t_Keys> KeyLoger::Keys;

  7. #7
    Membre confirm� Avatar de awesomeman
    Homme Profil pro
    �tudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Par d�faut
    Merci pour vos r�ponses et d�sol� de ne pas avoir r�pondu plus tot .
    J'ai r�ussi � r�gler mon probl�me il y a deux jours grace aux lien de bacelar :
    Ne pas confondre d�claration et d�finition.
    https://stackoverflow.com/questions/...private-static
    Merci aussi dalfab, meme si j'ai vu ta r�ponse un peu tard ..

    Au passage, les keyloggers ne vont-ils pas � l'encontre de la charte du forum?
    C'est un projet scolaire, rien de bien m�chant, surtout si ce "Keylogger" est visible dans le task manager ..

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. mutex ou ne pas mutex, doit-on prot�ger les std::queue
    Par bleuerouge dans le forum SL & STL
    R�ponses: 3
    Dernier message: 20/07/2008, 18h28
  2. static std::<vector> c'est possible?
    Par Krishna dans le forum C++
    R�ponses: 6
    Dernier message: 03/06/2008, 11h40
  3. Erreur avec Typedef et std
    Par leCcsympas dans le forum SL & STL
    R�ponses: 2
    Dernier message: 16/04/2007, 20h43
  4. Erreur de compilation sur std::string avec Dev C++
    Par dada57 dans le forum Dev-C++
    R�ponses: 4
    Dernier message: 20/03/2006, 18h06

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