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 :

Classe semble bien construite, erreur de link à l'instantiation


Sujet :

MFC

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut Classe semble bien construite, erreur de link à l'instantiation
    Bonjour à tous,


    Je viens de chercher comment utiliser les connexion internet en C++/MFC.
    J'ai donc trouvé des exemples, et j'ai testé ces exemple dans mon programme : Cela fonctionne.

    J'ai donc décidé de me créer une classe CInternet afin d'y faire des fonctions/procédures. Le soucis est que depuis que j'ai crée cette classe j'ai des erreurs de links qui semblent être liées à des inclusions croisées, alors que je n'ai pas l'impression d'en avoir.

    J'ai passé 1h30 à chercher hier soir , et je ne m'en sors pas

    Je voudrais savoir si quelqu'un aurait une idée :

    Voici tout d'abord la configuration fonctionnelle de mon sources ( Avant que je fasse ma classe ), ce code étant donc dans la classe de ma boite de dialogue ( oui , ça n'est pas propre, c'était juste pour tester )

    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
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    #include <initguid.h> 
    #include "connmgr.h"
    #include <commctrl.h> 
    #define INITGUID 
    #include <connmgr.h>
     
    *Ne pas oublier de linker en entrée :
    cellcore.lib wininet.lib
     
    * Si erreur de link : Désactiver les entêtes précompilées du sources
     
    void CTestPDADlg::OnBnClickedButton1()
    {
     
     
    	HANDLE phConnection;
    	CONNMGR_CONNECTIONINFO ConnInfo;
    	ZeroMemory(&ConnInfo, sizeof(ConnInfo));
    	ConnInfo.cbSize 		= sizeof(ConnInfo);
    	ConnInfo.dwParams 		= CONNMGR_PARAM_GUIDDESTNET;
    	ConnInfo.dwFlags 		= CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_WAP | CONNMGR_FLAG_PROXY_SOCKS4 | CONNMGR_FLAG_PROXY_SOCKS5;
    	ConnInfo.dwPriority		= CONNMGR_PRIORITY_USERINTERACTIVE;
    	ConnInfo.guidDestNet 	= IID_DestNetInternet;
    	ConnInfo.bExclusive 	= FALSE; 
    	ConnInfo.bDisabled	 	= FALSE;
     
    	//----------check gprs status-------------
     
    	DWORD dwStatus = 0;
    	ConnMgrConnectionStatus(&phConnection,&dwStatus);
     
    	if(dwStatus!=CONNMGR_STATUS_CONNECTED)
     
    	{
    		AfxMessageBox(L"disconnected",0,0);
    	}
     
    	//------------------------- 
     
    	HRESULT hResult = ConnMgrEstablishConnectionSync(&ConnInfo, &phConnection, 10*1000, &dwStatus );
     
    	//----------check gprs status-------------
     
    	ConnMgrConnectionStatus(&phConnection,&dwStatus);
     
    	if(dwStatus==CONNMGR_STATUS_CONNECTED)
     
    	{
    		AfxMessageBox(L"connected",0,0);
    	}
     
    }
    Dans ce cas donc, tout fonctionne. IHM et Code sont mélangés, j'ai donc voulu créer ma classe :

    Internet.h
    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
     
     
    #include <initguid.h> 
    #include "connmgr.h"
    #include <commctrl.h> 
    #define INITGUID 
    #include <connmgr.h>
     
    #pragma once
     
    class CInternet
    {
    private :
    	HANDLE m_phConnection;
    	CONNMGR_CONNECTIONINFO m_ConnInfo;
    	DWORD m_dwStatus;
    public:
    	CInternet(void);
    	~CInternet(void);
    	bool Connect();
    	void Disconnect();
    	bool IsConnected();
     
    };
    internet.cpp
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #include "StdAfx.h"
    #include "Internet.h"
     
     
    CInternet::CInternet(void)
    {
    	ZeroMemory(&m_ConnInfo, sizeof(m_ConnInfo));
    	m_ConnInfo.cbSize 		= sizeof(m_ConnInfo);
    	m_ConnInfo.dwParams 	= CONNMGR_PARAM_GUIDDESTNET;
    	m_ConnInfo.dwFlags 		= CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_WAP | CONNMGR_FLAG_PROXY_SOCKS4 | CONNMGR_FLAG_PROXY_SOCKS5;
    	m_ConnInfo.dwPriority	= CONNMGR_PRIORITY_USERINTERACTIVE;
    	m_ConnInfo.guidDestNet 	= IID_DestNetInternet;
    	m_ConnInfo.bExclusive 	= FALSE; 
    	m_ConnInfo.bDisabled	= FALSE;
    	m_dwStatus				= 0;
    }
     
    CInternet::~CInternet(void)
    {
    }
     
    bool CInternet::Connect()
    {
    	HRESULT hResult = ConnMgrEstablishConnectionSync(&m_ConnInfo, &m_phConnection, 10*1000, &m_dwStatus );
    	ConnMgrConnectionStatus(&m_phConnection,&m_dwStatus);
    	if(m_dwStatus==CONNMGR_STATUS_CONNECTED)
    	{
    		return true;	
    	}
    	else
    	{
    		return false;
    	}
     
    }
     
    void CInternet::Disconnect()
    {
    	ConnMgrReleaseConnection(m_phConnection,true);
    }
     
    bool CInternet::IsConnected()
    {
    	ConnMgrConnectionStatus(&m_phConnection,&m_dwStatus);
     
    	if(m_dwStatus=CONNMGR_STATUS_CONNECTED)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}	
    }

    Jusque la tout se compile sans problème , ma classe me parait donc bonne.

    Le problème : Je vais dans la classe de ma boite de dialogue, je fais un

    Je compile, et là :
    Erreur 1 error LNK2005: IID_DestNetInternet déjà défini(e) dans Dialog1Dlg.obj Internet.obj TestPDA
    Erreur 2 error LNK2005: IID_DestNetCorp déjà défini(e) dans Dialog1Dlg.obj
    Erreur 3 error LNK2005: IID_DestNetWAP déjà défini(e) dans Dialog1Dlg.obj
    Erreur 4 error LNK2005: IID_DestNetSecureWAP déjà défini(e) dans Dialog1Dlg.obj
    Erreur 5 fatal error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés
    C'est donc lors de la déclaration du .h que j'ai un soucis

    Je ne vois vraiment pas d'ou cela vient.

    Je vous remercie tous d'avance de l'attention que vous porterez à ce message,

    Bien cordialement,

    Nixeus

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Je viens d'ajouter l'option /VERBOSE au compilateur afin d'avoir plus d'info sur la compilation,et voici ce que je trouve :

    1>Internet.obj : error LNK2005: IID_DestNetInternet déjà défini(e) dans Dialog1Dlg.obj
    1>Internet.obj : error LNK2005: IID_DestNetCorp déjà défini(e) dans Dialog1Dlg.obj
    1>Internet.obj : error LNK2005: IID_DestNetWAP déjà défini(e) dans Dialog1Dlg.obj
    1>Internet.obj : error LNK2005: IID_DestNetSecureWAP déjà défini(e) dans Dialog1Dlg.obj
    J'éspère que cela saura vous aiguiller.

    Encore milles merci,

    Cordialement,

    Nixeus

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Si quelqu'un est interressé, je peux uploader mon petit projet.
    Une biere est offerte pour celui qui règle le problème !

  4. #4
    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
    Par défaut
    salut,
    tu as mis un
    dans ton .h en début de fichier internet.h ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Un conseil qui peut peut-être résoudre ton problème: inclus SYSTEMATIQUEMENT dans tes *.h les lignes suivantes en tout début de fichier,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifndef _INC_MONFICHIERINCLUDE_H
    #define _INC_MONFICHIERINCLUDE_H
     
    #include  <blablabla...
    ...
    [ton code ici]
    ...
     
    #endif
    Cela permet de n'inclure ton fichier qu'une seule fois et évite de redéclarer des constantes qui l'ont déjà été lors d'un précédent "#include".

Discussions similaires

  1. template et erreur de link
    Par Willand dans le forum Langage
    Réponses: 12
    Dernier message: 05/12/2006, 21h19
  2. Réponses: 15
    Dernier message: 21/08/2006, 01h41
  3. erreur de link(age) g++
    Par corwin dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/05/2004, 11h33
  4. [wxWindows] Erreur de link pour ODBC
    Par ovh dans le forum wxWidgets
    Réponses: 3
    Dernier message: 28/01/2004, 15h38
  5. DirectDrawCreate erreur de link
    Par Ing_Ben dans le forum DirectX
    Réponses: 1
    Dernier message: 01/12/2002, 18h46

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