[C++/MFC] CSocket::OnSend :S

Pagina: 1
Acties:

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 21-06 17:10
Sorry, ben ik weer met m'n CSocket's...
Zoals ik in een eerder topic al had uitgelegd, probeer ik vanuit de Callback functies van de CSocket messages te sturen naar de owner/parent van het object. Maar nu loop ik tegen een vaag probleem aan: vanuit de OnReceive werkt het perfect, maar vanuit de OnSend klapt m'n programma eruit met een dikke error.

Omdat ik nogal perfectionistisch ben (wie niet?) wil ik de andere functies ook overriden (OnSend, OnClose, OnAccept, ...). De rest doet het allemaal perfect, alleen OnSend niet, terwijl de code er verder exact hetzelfde uit ziet:

C++:
1
2
3
4
5
6
void CMySocket::OnSend(int nErrorCode)
{
    CSocket::OnSend(nErrorCode);

    m_pParent->SendMessage(SOCKET_SEND);
}


De volgende foutmelding verschijnt zo gauw ik op de betreffende socket probeer te connecten:

Afbeeldingslocatie: http://home.wanadoo.nl/riezebosch/CSocket_OnSend.gif

De code die in afxwin2.inl staat:
C++:
1
    { ASSERT(::IsWindow(m_hWnd)); return ::SendMessage(m_hWnd, message, wParam, lParam); }


In debug-mode heeft de m_pParent de volgende waarde: 0x0012fd98 {MainGui hWnd= ???} en dit is dezelfde waarde als in OnReceive, waarin de SendMessage wél goed gaat. Heeft iemand een idee waarom deze foutmelding optreed?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16:32
Draait die OnSend in een andere draad ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 21-06 17:10
Waarschijnlijk wel, maar niet zichtbaar voor mij. Het is een callback-functie van de CSocket, welke ik override met mijn eigen implementatie.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16:32
Kennelijk is die windowhandle niet correct, of niet geldig op dat moment.
Ik zou het toch zoeken in de richting van threading.

( Zet eens een Sleep in die OnSend :) )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 21-06 17:10
dank je farlane, je hebt me waarschijnlijk aan de oplossing/oorzaak van het probleem geholpen:

In de constructor van de CDialog (de parent van de CSocket, waarnaar de messages verstuurd zullen worden), initialiseer ik de CSocket. Maar op dat moment is de CDialog zelf nog niet in staat messages te ontvangen en te verwerken.
Met de OnReceive gaat het wel goed, omdat die pas optreed als de CDialog helemaal geinitialiseerd is. Maar de OnSend gaat fout, omdat die al optreed terwijl de CDialog nog niet eens klaar is met z'n constructor...

Allemaal puur theoretisch hoor, moet nog gaan proberen of dit echt het probleem is :P

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack