[C++/COM/Messenger] Interface lukt niet

Pagina: 1
Acties:
  • 112 views sinds 30-01-2008
  • Reageer

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Ik probeer via C++ (Visual C++) verbinding te maken met MSN Messenger via een COM object. Ik heb hier eigenlijk niet veel ervaring mee .. en het lukt dus ook niet ;)
Er zijn nog maar weinig voorbeelden te vinden over hoe je met messenger kan babbelen, dus vandaar dat ik hier kom. Via onderstaande code probeer ik dus een interface pointer te krijgen ... maar dit lukt niet, misschien maak ik een stomme fout, of kan het makkelijker maar ik zie het ff niet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    IMessenger *pMessenger = NULL;

    // B69003B3-C55E-4B48-836C-BC5946FC3B28
    static const GUID MesGuid =
    { 0xB69003B3, 0xC55E, 0x4B48, { 0x83, 0x6C, 0xBC, 0x59, 0x46, 0xFC, 0x3B, 0x28 } };
    
    // D50C3186-0F89-48F8-B204-3604629DEE10
    static const GUID InterfaceGuid =
    { 0xD50C3186, 0x0F89, 0x48F8, { 0xB2, 0x04, 0x36, 0x04, 0x62, 0x9D, 0xEE, 0x10 } };   

    if(CoCreateInstance( MesGuid,
                       NULL,
                         CLSCTX_LOCAL_SERVER,
                         InterfaceGuid,
                         (void**)&pMessenger) == S_OK)
    {
        MessageBox(NULL, "COM Interface OK", "OK", MB_OK);
    }
    else
    {
        MessageBox(NULL, "COM Interface NIET OK", "Niet OK", MB_OK);
    }

Ik krijg dus de message box "COM interface NIET OK" te zien bij het opstarten (MFC app). thank u in advance

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 19-08 14:53
Op maandag 29 oktober 2001 17:45 schreef Orphix het volgende:
Ik krijg dus de message box "COM interface NIET OK" te zien bij het opstarten (MFC app). thank u in advance
Op MSDN zul je hier vast wel informatie over vinden...

Verwijderd

Uit die CoCreateInstance komt een HRESULT welke je moet checken als je wil weten wat er mis is, aangezien je zelf al zegt dat je totaal geen com ervaring hebt gok ik er op dat je als result 0x800401F0 terug krijgt (CoInitialize has not been called). CoInitialize moet je aan het begin van je app aanroepen, en CoUninitialize weer netjes aan het eind, voor je je verder met die messenger gaat bezig zijn raad ik je aan eerst de basis priciepes van com even door te nemen.

bij deze wat lees voer:

http://www.codeproject.com/com/comintro.asp
http://www.codeproject.com/com/comintro2.asp

Verwijderd

Omdat ik toch bored was maar wat voor je in elkaar gedraait
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#import "F:\program files\messenger\msmsgs.exe" no_namespace
int main(void)
{
    IMessengerAppPtr MesApp;
    CoInitialize(NULL);
    HRESULT HR=MesApp.CreateInstance("Messenger.MessengerApp");
    if (S_OK==HR)
    {
        try {
            MesApp->LaunchOptionsUI(MOPTDLG_PREFERENCES_PAGE);
        }
        catch(_com_error er) 
        { 
            MessageBox(NULL,"Whoops that didn't work!",0,0);
        }
    }
    CoUninitialize();
    return 0;
}

Het opend heel erg verassend het Preferences scherm

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Hartstikke bedankt, Yarvieh! Het werkt perfect (tot nu toe hehe :))
En op MSDN heb ik ook al genoeg rondgekeken en COM introducties e.d. maar ik mis vaak wat simpele voorbeeldjes en als die er zijn zijn ze vaak in VB |:(
Maar ik zal eens kijken naar de #import directive, want die ziet er wel handig uit ;)

Verwijderd

Op maandag 29 oktober 2001 18:56 schreef Orphix het volgende:
Hartstikke bedankt, Yarvieh! Het werkt perfect (tot nu toe hehe :))
Ja het kan ook nix, 't ene ding wat ie wel kan kan ie goed though :Y) #import genereerd stiekum op de achtergrond msmsgs.tlh en msmsgs.tli voor je (staan in je debug/release build dir) aan de hand van de typelibrary. 't is soms wel es praktish om es wat rond te kijken in die files om te zien wat er zoal aan interfaces en troep in zit. Have fun, succ6!
Pagina: 1