[API Msn] get_MyContacts

Le
Jeremy Dartigalongue
Bonjour,

Je débute en c - c++ et il y a maintenant quelques temps j'ai décider de
commencer a apprendre les api Win32 ainsi que les api des logiciel Windows.
Je commence a travailler les api de MSN et j'ai un peut de mal avec un
type de variables ( si cela en est une ^^)

Le but si j'ai bien comprit et de stocker les contacts msn dans une
variable ou tableau mais je ne comprend pas comment les afficher.

voici mon code:

#include <iostream>
#include <windows.h>

#import "C:Program FilesMessengermsmsgs.exe" tlbid(3), named_guids,
embedded_idl
using namespace MessengerAPI;

[ module(name="MessengerTest") ];


int main()
{
// Pointeur vers l'interface messenger
IMessenger *pIMessenger = NULL;
IMessengerContacts *pIMessengerContacts = NULL;

// Initialisation
CoInitialize(0);
CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_ALL,

IID_IMessenger, (void **)&pIMessenger);


pIMessenger->get_MyContacts((IDispatch**)&pIMessengerContacts);



// Terminaison
pIMessenger->Release();
CoUninitialize();

system("PAUSE");
return 0;
}

Merci d'avance

Jeremy
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
nico
Le #20351571
Jeremy Dartigalongue wrote:


// Pointeur vers l'interface messenger
IMessenger *pIMessenger = NULL;



Il ne faut pas utiliser IMessenger, car elle n'est plus valable
(même sous XP avec les dernières versions de Messenger)

http://msdn.microsoft.com/en-us/library/ms631614(VS.85).aspx
Jeremy Dartigalongue
Le #20351691
nico a écrit :
Jeremy Dartigalongue wrote:


// Pointeur vers l'interface messenger
IMessenger *pIMessenger = NULL;



Il ne faut pas utiliser IMessenger, car elle n'est plus valable
(même sous XP avec les dernières versions de Messenger)

http://msdn.microsoft.com/en-us/library/ms631614(VS.85).aspx



Effectivement je n'avait pas vus cela.

MSDN ne précise pas par quoi cela a était remplacer, pouvez vous
m'indiquer ce que je dois utiliser?
Christian ASTOR
Le #20354171
On 14 oct, 21:10, Jeremy Dartigalongue
> Il ne faut pas utiliser IMessenger, car elle n'est plus valable
> (même sous XP avec les dernières versions de Messenger)

>http://msdn.microsoft.com/en-us/library/ms631614(VS.85).aspx
Effectivement je n'avait pas vus cela.
MSDN ne précise pas par quoi cela a était remplacer, pouvez vous
m'indiquer ce que je dois utiliser?



Sur mon poste (XP SP2), ça marche pourtant....
Mais il faut toujours tester le retour des apis.
Par exemple, il faut faire :
HRESULT hr;
hr = pIMessenger->get_MyContacts((IDispatch**)&pIMessengerContacts);
if (SUCCEEDED(hr))
{
// .... suite du code
}

Pour les contacts, tu récupères le nombre et tu boucles :
long nCount = 0;
hr = pIMessengerContacts->get_Count(&nCount);
IMessengerContact* pMessengerContact = NULL;
for (int i = 0; i < nCount; i++)
{
hr = pIMessengerContacts->QueryInterface(IID_IMessengerContact, (VOID
**)&pMessengerContact);
if(SUCCEEDED(hr))
{
BSTR bstrName;
pMessengerContact->get_FriendlyName(&bstrName);
// ... etc...
Jeremy Dartigalongue
Le #20354641
Christian ASTOR a écrit :
On 14 oct, 21:10, Jeremy Dartigalongue
Il ne faut pas utiliser IMessenger, car elle n'est plus valable
(même sous XP avec les dernières versions de Messenger)
http://msdn.microsoft.com/en-us/library/ms631614(VS.85).aspx


Effectivement je n'avait pas vus cela.
MSDN ne précise pas par quoi cela a était remplacer, pouvez vous
m'indiquer ce que je dois utiliser?



Sur mon poste (XP SP2), ça marche pourtant....
Mais il faut toujours tester le retour des apis.
Par exemple, il faut faire :
HRESULT hr;
hr = pIMessenger->get_MyContacts((IDispatch**)&pIMessengerContacts);
if (SUCCEEDED(hr))
{
// .... suite du code
}

Pour les contacts, tu récupères le nombre et tu boucles :
long nCount = 0;
hr = pIMessengerContacts->get_Count(&nCount);
IMessengerContact* pMessengerContact = NULL;
for (int i = 0; i < nCount; i++)
{
hr = pIMessengerContacts->QueryInterface(IID_IMessengerContact, (VOID
**)&pMessengerContact);
if(SUCCEEDED(hr))
{
BSTR bstrName;
pMessengerContact->get_FriendlyName(&bstrName);
// ... etc...



voila ce que j'ai fait et cela ne marche pas.

// Pointeur vers l'interface messenger
IMessenger *pIMessenger = NULL;
IMessengerContacts *pIMessengerContacts = NULL;

// Initialisation
CoInitialize(0);
CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_ALL,

IID_IMessenger, (void **)&pIMessenger);
HRESULT hr;

hr = pIMessenger->get_MyContacts((IDispatch**)&pIMessengerContacts);

if (SUCCEEDED(hr))
{
long nCount = 0;
hr = pIMessengerContacts->get_Count(&nCount);
std::cout << nCount << std::endl;

IMessengerContact* pMessengerContact = NULL;
for (int i = 0; i < nCount; i++)
{
hr = pIMessengerContacts->QueryInterface(IID_IMessengerContact,
(VOID**)&pMessengerContact);
if(SUCCEEDED(hr))
{
BSTR bstrName;
pMessengerContact->get_FriendlyName(&bstrName);

char test;
char *testa = &test;
BSTRtoASC(bstrName,testa);

std::cout << testa << std::endl;

}

else
{
std::cout << "erreur recuperation ou ecriture du nom" << std::endl;
}
}

}

else
{
std::cout << "erreur nombre contact" << std::endl;
}






// Terminaison
pIMessenger->Release();
CoUninitialize();
Christian ASTOR
Le #20355151
On 15 oct, 13:43, Jeremy Dartigalongue
voila ce que j'ai fait et cela ne marche pas.



     CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_ALL,



"cela ne marche pas" est vague.
Il faut déjà tester "hr = CoCreateInstance..."
(cela peut ramener REGDB_E_CLASSNOTREG)
et faire du pas-à-pas, surtout sur chaque "hr =..." pour évaluer hr
Jeremy Dartigalongue
Le #20356041
Christian ASTOR a écrit :
On 15 oct, 13:43, Jeremy Dartigalongue
voila ce que j'ai fait et cela ne marche pas.



CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_ALL,



"cela ne marche pas" est vague.
Il faut déjà tester "hr = CoCreateInstance..."
(cela peut ramener REGDB_E_CLASSNOTREG)
et faire du pas-à-pas, surtout sur chaque "hr =..." pour évaluer hr



je l'avait déja fait, j'ai déterminer que cela vien de cette partit

IMessengerContact* pMessengerContact = NULL;
for (int i = 0; i < nCount; i++)
{
hr =
pIMessengerContacts->QueryInterface(IID_IMessengerContact,
(VOID**)&pMessengerContact);
if(SUCCEEDED(hr))
{
BSTR bstrName;
pMessengerContact->get_FriendlyName(&bstrName);

char test;
char *testa = &test;
BSTRtoASC(bstrName,testa);

std::cout << testa << std::endl;

}


donc de QueryInterface mais je ne sais pas a quoi cela correspond et je
ne sais pas pour quel raison cela ne marche pas.
nico
Le #20358991
Jeremy Dartigalongue wrote:

donc de QueryInterface mais je ne sais pas a quoi cela correspond et je
ne sais pas pour quel raison cela ne marche pas.



Tu ne dis toujours pas à quoi est égal hr, car c'est ça qui donne
l'explication..
Jeremy Dartigalongue
Le #20360181
nico a écrit :
Jeremy Dartigalongue wrote:

donc de QueryInterface mais je ne sais pas a quoi cela correspond et
je ne sais pas pour quel raison cela ne marche pas.



Tu ne dis toujours pas à quoi est égal hr, car c'est ça qui donne
l'explication..



cela ma marque "erreur récupération ou écriture du nom" que j'ai
indiquer dans le else
donc cela viens bien de celui la ou il y a un problème. donc il renvoie
pas SUCCEEDED
Christian ASTOR
Le #20361161
On 16 oct, 12:16, Jeremy Dartigalongue
cela ma marque "erreur récupération ou écriture du nom" que j'ai
indiquer dans le else



Oui bien sûr, c'est le message que tu affiches !
C'est la valeur de hr qu'il faut lire !
Christian ASTOR
Le #20361691
On 16 oct, 14:19, Christian ASTOR
On 16 oct, 12:16, Jeremy Dartigalongue
> cela ma marque "erreur récupération ou écriture du nom" que j'ai
> indiquer dans le else

Oui bien sûr, c'est le message que tu affiches !
C'est la valeur de hr qu'il faut lire !



Et si hr == E_NOINTERFACE, tu peux passer par IDispatch :

IDispatch *pIDispatch = NULL;
hr = pIMessengerContacts->Item(i, &pIDispatch); // ou raw_Item()
if(SUCCEEDED(hr))
{
hr = pIDispatch->QueryInterface(IID_IMessengerContact, (VOID **)
&pMessengerContact);
if(SUCCEEDED(hr))
{
Publicité
Poster une réponse
Anonyme