K2T.eu :: Forum

Specjalne => API/SDK => Wątek zaczęty przez: SubZero w Luty 12, 2014, 12:18:59 pm

Tytuł: Brak informacji o kontakcie
Wiadomość wysłana przez: SubZero w 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ść.
Tytuł: Odp: Brak informacji o kontakcie
Wiadomość wysłana przez: Kaworu w 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.
Tytuł: Odp: Brak informacji o kontakcie
Wiadomość wysłana przez: SubZero w 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?
Tytuł: Odp: Brak informacji o kontakcie
Wiadomość wysłana przez: Kaworu w 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"
Tytuł: Odp: Brak informacji o kontakcie
Wiadomość wysłana przez: SubZero w Luty 13, 2014, 11:36:03 am
Ooops, tego nie zauważyłem.
Działa, dzięki za pomoc :)