Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[API Msn] get_MyContacts

12 réponses
Avatar
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 Files\Messenger\msmsgs.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

10 réponses

1 2
Avatar
nico
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
Avatar
Jeremy Dartigalongue
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?
Avatar
Christian ASTOR
On 14 oct, 21:10, Jeremy Dartigalongue wrote:
> 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...
Avatar
Jeremy Dartigalongue
Christian ASTOR a écrit :
On 14 oct, 21:10, Jeremy Dartigalongue wrote:
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();
Avatar
Christian ASTOR
On 15 oct, 13:43, Jeremy Dartigalongue wrote:

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
Avatar
Jeremy Dartigalongue
Christian ASTOR a écrit :
On 15 oct, 13:43, Jeremy Dartigalongue wrote:

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.
Avatar
nico
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..
Avatar
Jeremy Dartigalongue
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
Avatar
Christian ASTOR
On 16 oct, 12:16, Jeremy Dartigalongue wrote:

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 !
Avatar
Christian ASTOR
On 16 oct, 14:19, Christian ASTOR wrote:
On 16 oct, 12:16, Jeremy Dartigalongue wrote:

> 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))
{
1 2