2009-05-05 4 views
1

Je suis en train d'accéder aux données via HTTP en appelant CInternetSession :: OpenUrl sur Windows Mobile 5 (codage en C++ avec MFC). Je reçois toujours une exception avec le code d'erreur 12029 (impossible de se connecter).CInternetSession :: OpenURL sur Windows Mobile provoque une erreur 12029 (ne peut pas se connecter)

Je pense que je dois utiliser l'API Connection Manager pour créer une première connexion. Quelqu'un peut-il confirmer cela?

Je vais essayer de coder, basé sur l'information ici (http://msdn.microsoft.com/en-us/magazine/dd263096.aspx), et je rapporterai mes expériences comme réponse si approprié. Ce serait bien d'avoir d'autres contributions aussi.

J'ai ouvert avec succès une connexion en utilisant ce code:

// Find out which type of connection is needed for this URL. 
GUID guid; 
HRESULT hresult = ConnMgrMapURL((LPCTSTR)url,&guid,NULL); 
if (!SUCCEEDED(hresult)) 
{ 
delete [] url; 
aError = CartoType::KErrorInternetIo; 
return NULL; 
} 

// Get a connection. 
CONNMGR_CONNECTIONINFO cinfo; 
memset(&cinfo,0,sizeof(cinfo)); 
cinfo.cbSize = sizeof(cinfo); 
cinfo.bDisabled = FALSE; 
cinfo.bExclusive = FALSE; 
cinfo.guidDestNet = guid; 
cinfo.dwParams = CONNMGR_PARAM_GUIDDESTNET; 
cinfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP; 
cinfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE; 
DWORD status; 
hresult = ConnMgrEstablishConnectionSync(&cinfo,&iConnectionHandle,15000,&status); 

et je sais que cela a fonctionné parce qu'il définit le statut à CONNMGR_STATUS_CONNECTED; néanmoins, je l'appelle CInternetSession::OpenURL immédiatement après et il renvoie une exception.

Répondre

1

est ici un code qui fonctionne. Il utilise l'API Windows de niveau inférieur, pas MFC. Peut-être que ce n'est pas idéal et contient des redondances (dois-je vraiment besoin de l'appel ConnMgr?), Mais il fonctionne:

// Find out which type of connection is needed for this URL. 
GUID guid; 
HRESULT hresult = ConnMgrMapURL((LPCTSTR)url,&guid,NULL); 
if (!SUCCEEDED(hresult)) 
    { 
    delete [] url; 
    aError = CartoType::KErrorInternetIo; 
    return NULL; 
    } 

// Get a connection. 
CONNMGR_CONNECTIONINFO cinfo; 
memset(&cinfo,0,sizeof(cinfo)); 
cinfo.cbSize = sizeof(cinfo); 
cinfo.bDisabled = FALSE; 
cinfo.bExclusive = FALSE; 
cinfo.guidDestNet = guid; 
cinfo.dwParams = CONNMGR_PARAM_GUIDDESTNET; 
cinfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP; 
cinfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE; 
DWORD status; 
hresult = ConnMgrEstablishConnectionSync(&cinfo,&iConnectionHandle,15000,&status); 

HINTERNET hinternet = InternetOpen(_T("CartoType"),INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); 
HINTERNET hfile = InternetOpenUrl(hinternet,(LPCTSTR)url,NULL,0,0,1); 

Ce retourne un handle valide que je peux lire à l'aide InternetReadFile, puis fermez l'aide InternetCloseHandle.

+0

Vous n'avez pas besoin ConnMgr s'il existe déjà une connexion disponible (Wifi ou ActiveSync). Lorsque le ConnMgr appelle viennent en est utile si vous souhaitez créer une connexion de données cellulaires si aucune connexion existe actuellement (par exemple 3G) ou si vous voulez créer une connexion VPN. –

Questions connexes