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:
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:
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:
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
Code:
#include "internet.h"
Je compile, et là :
Citation:
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