Skocz do zawartości


Informacje o zgłoszeniu

  • #002941

  • Zrealizowano

  • -

  • 2.2.1.37

  • 2 - średnia

Potwierdzenia zgłoszenia

  • Tak (0)Nie (0)
Zdjęcie

[SDK] AQQ_SYSTEM_SETSHOWANDSTATUS i jabber

Napisane przez Beherit w 2010.02.03, 22:23

Czasem po wywołaniu funkcji AQQ_SYSTEM_SETSHOWANDSTATUS w opisie głównego konta jabber pojawiają się różne dziwne znaczki (takie kwadraciki, UsagiAddict twierdzi, że to japońskie literki :P) albo jakiś kod HTML (przykładzik). Zwalił bym to na moją winę ale opis we wtyczkach sieciowych jak i pozostałych kontach jabber jest prawidłowy. W konsoli XML widać też te dziwne znaczki czyli po prostu AQQ coś źle interpretuje. Kod jaki wywołuję wygląda tak:

PluginLink.CallService(AQQ_FUNCTION_GETNETWORKSTATE,(WPARAM)(&PluginStateChange),0); //wypełnienie struktury PluginStateChange na podstawie głównego konta jabber 

PluginStateChange.cbSize = sizeof(TPluginStateChange);
PluginStateChange.Status = opis.w_str(); //Zmienna UnicodeString z opisem która jak widać jest zmieniana na wchar_t*
PluginStateChange.Force = force; //Zmienna bool

PluginLink.CallService(AQQ_SYSTEM_SETSHOWANDSTATUS,0,(LPARAM)(&PluginStateChange));

Udało mi się złapać błąd na screenie. Jak widać kontak GG ma dobry opis zaś jabber nie:
Dołączona grafika

Aktualizacja statusu do: Zatwierdzono
Aktualizacja istotności do: 2 - przeciętna


UsagiAddict

2010.02.03, 23:26
bezpośrednio połączone z tym tematem

Błąd nie naprawiony :(

Aktualizacja statusu do: Zatwierdzono
Aktualizacja wersji do: 2.2.0.17
Zgłoszenie naprawione w wersji: Brak

Aktualizacja statusu do: Do sprawdzenia
Zgłoszenie naprawione w wersji: 2.2.0.19

Co prawda kod jest w C++, ale widzę tutaj pewien problem. Co prawda konwertujesz opis do PWideChar, ale skonwertowana wartość wpada do zmiennej tymczasowej, której żywot ogranicza się jedynie do czasu trwania funkcji. Skonwertuj wartość opisu, i umieść ją w globalnej zmiennej PWideChar. Dopiero wówczas przekaż ją do funkcji. Obecny stan wprowadza bowiem czynnik przypadku, bo jeżeli zakres pamięci w którym umieszczony został opis, zostanie zapisany innymi danymi, to właśnie ów dane pojawią się zamiast opisu na liście kontaktów.

Beherit doinstaluj sobie Chinskie czcionki Twoj opis:

⹬潣⽭呗㥆㍂㝅䅃❁琠㵯戧桥牥瑩慀煱攮❵琠灹㵥攧牲牯㸧攼敶瑮砠汭獮✽瑨灴⼺樯扡敢⹲牯⽧牰瑯捯汯瀯扵畳⍢癥湥❴㰾瑩浥⁳潮敤✽瑨灴⼺樯扡敢⹲牯⽧牰瑯捯汯琯湵❥㰾瑩浥椠㵤㐧㍆㐹䉆㠲䈷䔳㸧琼湵⁥浸湬㵳栧瑴㩰⼯慪扢牥漮杲瀯潲潴潣⽬畴敮㸧愼瑲獩⽴㰾慲楴杮㸯猼畯捲⽥㰾楴汴㹥求湩⁤‭潙牵⁥慆楤杮传瑵⼼楴汴㹥琼慲正㸯甼楲㸯⼼畴敮㰾椯整㹭⼼瑩浥㹳⼼癥湥㹴攼牲牯挠摯㵥㔧㌰‧祴数✽慣据汥㸧猼牥楶散甭慮慶汩扡敬砠汭獮✽牵㩮敩晴瀺牡浡㩳浸㩬獮砺灭⵰瑳湡慺❳㸯⼼牥潲㹲⼼敭獳条㹥

ciekawie to wyglada w translate.google.com ;)))

Aktualizacja statusu do: Do sprawdzenia
Zgłoszenie naprawione w wersji: 2.2.0.19

Znaczy się coś zmienisz w kodzie AQQ w nowej wersji czy po prostu uważasz, że to mój błąd? Bo zmieniłem kod wtyczki i błąd nadal występuje:

void SetStatus(UnicodeString SetStatusStatus, bool Force)
{
  wchar_t* SetStatusStatusW = SetStatusStatus.w_str();

  PluginLink.CallService(AQQ_FUNCTION_GETNETWORKSTATE,(WPARAM)(&PluginStateChange),0);

  PluginStateChange.cbSize = sizeof(TPluginStateChange);
  PluginStateChange.Status = SetStatusStatusW;
  PluginStateChange.Force = Force;

  PluginLink.CallService(AQQ_SYSTEM_SETSHOWANDSTATUS,0,(LPARAM)(&PluginStateChange));
}


Ale nadal nie jest to zmienna globalna.

Zmieniłem kod i dalej to samo:

wchar_t* SetStatusStatusW;

void SetStatus(UnicodeString SetStatusStatus, bool Force)
{
  SetStatusStatusW = SetStatusStatus.w_str();

  PluginLink.CallService(AQQ_FUNCTION_GETNETWORKSTATE,(WPARAM)(&PluginStateChange),0);

  PluginStateChange.cbSize = sizeof(TPluginStateChange);
  PluginStateChange.Status = SetStatusStatusW;
  PluginStateChange.Force = Force;

  PluginLink.CallService(AQQ_SYSTEM_SETSHOWANDSTATUS,0,(LPARAM)(&PluginStateChange));
}
:]

Błąd nie poprawiony. Dziś zamiast japońskich/chińskich znaczków dało mi do opisu kod HTML i wywaliło AV. Stos wyjątków tutaj. Czyli błąd łączy się z tym tematem, który został olany.

Aktualizacja statusu do: Zatwierdzono
Aktualizacja wersji do: 2.2.0.21
Zgłoszenie naprawione w wersji: Brak

Aktualizacja statusu do: Do uzupełnienia

Może problem leży w tym, że wypełniasz tylko 3 pola w strukturze. Zerujesz chociaż całą resztę?

type
  PPluginStateChange = ^TPluginStateChange;

  TPluginStateChange = record
    cbSize: Integer;
    OldState: Integer;
    NewState: Integer;
    Status: PWideChar;
    ByHand: Boolean;
    UserIdx: Integer;
    JID: PWideChar;
    Force: Boolean;
    Server: PWideChar;
    Authorized: Boolean;
    FromPlugin: Boolean;
    Resource: PWideChar;
  end;


Nawet jak wyzeruję całą resztę to problem i tak się pojawia.

Aktualizacja statusu do: Zatwierdzono

Poza tym Oconnelu kazałeś mi używać funkcji AQQ_FUNCTION_GETNETWORKSTATE przed wywołaniem AQQ_SYSTEM_SETSHOWANDSTATUS, która uzupełnia całą strukturę PluginStateChange! Więc co to ma do rzeczy czy uzupełnię pozostałe dane czy też je wyzeruję?

Aktualizacja statusu do: Odrzucono

Inaczej. Nie wiem w czym konkretnie leży problem, ale z objawów stawierdzam, że przekazujesz adres pamięci który nie zawiera lub zawierał a już nie zawiera zmiennej PPluginStateChange. Jeżeli wyłapiesz ten moment w debbugerze to z pewnością zobaczysz że nie przekazujesz prawidłowych danych. Problem nie leży zatem po stronie AQQ.

Do jasnej cholery! Kiedyś to działało dobrze, dopiero z którąś wersję AQQ błąd zaczął występować a nic nie zmieniałem wtedy we wtyczce! Przestań zganiać błędy to róż na system lub po prostu zwyczajnie odrzucać.

Jeżeli wyłapiesz ten moment w debbugerze to z pewnością zobaczysz że nie przekazujesz prawidłowych danych. Problem nie leży zatem po stronie AQQ.

Jak kurde nie po stronie AQQ?! To jak wyjaśnisz to, że gdy ten błąd występuje to tylko i wyłącznie w sieciach jabber a w sieciach pochodzących ze wtyczek opis ustawia się wówczas prawidłowo? Badałem to już wiele wiele razy. Błąd leży po stronie AQQ. Debugowałem, próbowałem wypełniać w pełni strukturę, bawiłem się ze zmiennymi itp. Nic nie daje.

I nawet nie denerwuj mnie odrzucając błąd ponownie! Zaczynam powoli mieć dość pisać cokolwiek do AQQ skoro na poprawę jednego błędu czekam parę miesięcy a na dodanie czegoś do SDK kilkanaście miesięcy. Grrrrrrrr!

Aktualizacja statusu do: Zatwierdzono

to róż -> co rusz

Aktualizacja statusu do: Do uzupełnienia

Przygotuj zatem mini wtyczkę obrazującą problem to sprawdzę to. W chwili obecnej nie widzę błędu po stronie AQQ.

Aktualizacja statusu do: Odrzucono

Od miesiąca cisza w zgłoszeniu. Brak reakcji na prośbę o uzupełnienie. Brak możliwości kontaktu. Odrzucam.






Użytkownicy przeglądający to zgłoszenie: 0

0 użytkowników, 0 gości, 0 anonimowych