Autor Wątek: Brak informacji o kontakcie  (Przeczytany 851 razy)

0 Użytkowników i 1 Gość przegląda ten wątek.

Offline SubZero

Brak informacji o kontakcie
« dnia: Luty 12, 2014, 12:18:59 pm »
Mam funkcję dla hooka WTW_ON_PROTOCOL_EVENT:
WTW_PTR eventHook(WTW_PARAM wParam, WTW_PARAM lParam, void* ptr) {
wtwProtocolEvent* evn = reinterpret_cast<wtwProtocolEvent*>(wParam);
if((evn->event == WTW_PEV_MESSAGE_RECV) && (evn->type == WTW_PEV_TYPE_AFTER)) {
wtwMessageDef* msg = reinterpret_cast<wtwMessageDef*>(lParam);
wtwContactListItem itemHandle;
wtwContactDef def = msg->contactData;
initStruct(itemHandle);
int result = wtw->fnCall(WTW_CTL_CONTACT_FIND_EX, reinterpret_cast<WTW_PARAM>(&def), reinterpret_cast<WTW_PTR>(&itemHandle));
if (result == SIS_OK) {
zrób_coś_z(itemHandle.itemText);
}
}
return 0;
}
Wszystko niby jest ok, funkcja się wywołuje, problem pojawia się przy pobraniu danych kontaktu (wywołanie WTW_CTL_CONTACT_FIND_EX) - struktura itemHandle jest pusta.
Co robię nie tak? Podejrzewam, że coś pokręciłem z adresami, bo itemHandle.structSize ma po wywołaniu funkcji jakąś kosmiczną wartość.

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Odp: Brak informacji o kontakcie
« Odpowiedź #1 dnia: Luty 12, 2014, 12:52:09 pm »
Bo to działa tak:

WTW_PARAM _h = NULL;
wtw::g_pF->fnCall(WTW_CTL_CONTACT_FIND_EX, _p, (WTW_PARAM)&_h);

Znaczy zwraca jak nazwa twojej zmiennej wskazuje, handle a nie dane kontaktu.

Offline SubZero

Odp: Brak informacji o kontakcie
« Odpowiedź #2 dnia: Luty 13, 2014, 06:44:22 am »
Ook... C++ chyba jest dla mnie zbyt yntelygentny...
Zmieniłem parametr, niby dostaję w odpowiedzi jakiś adres, ale dalej mam tam śmieci
WTW_PTR eventHook(WTW_PARAM wParam, WTW_PARAM lParam, void* ptr) {
wtwProtocolEvent* evn = reinterpret_cast<wtwProtocolEvent*>(wParam);
if((evn->event == WTW_PEV_MESSAGE_RECV) && (evn->type == WTW_PEV_TYPE_AFTER)) {
wtwMessageDef* msg = reinterpret_cast<wtwMessageDef*>(lParam);
WTW_PARAM itemHandle = NULL;
wtwContactDef def = msg->contactData;
int result = wtw->fnCall(WTW_CTL_CONTACT_FIND_EX, def, (WTW_PARAM)&itemHandle);
if (result == SIS_OK) {
wtwContactListItem* item = (wtwContactListItem*)itemHandle;
// w item dalej śmieci
}
}
return 0;
}

Jak się dostać do wyniku?

Offline Kaworu

  • Ryszard
  • Szlachta
  • *
  • Twój Koszmar Senny
    • k2t.eu
Odp: Brak informacji o kontakcie
« Odpowiedź #3 dnia: Luty 13, 2014, 07:06:26 am »
/*******************************************************************************
**
** Function:
** WTW_CTL_CONTACT_GET
**
** Return value:
** S_OK, E_*
**
** Parameters:
** wP - itemHandle
** lP - wtwContactListItem*
**
*/

#define WTW_CTL_CONTACT_GET L"WTW/CTL/GetContact"

Offline SubZero

Odp: Brak informacji o kontakcie
« Odpowiedź #4 dnia: Luty 13, 2014, 11:36:03 am »
Ooops, tego nie zauważyłem.
Działa, dzięki za pomoc :)