CAsyncSocket Pointer exception
-
Hi Leute,
ich bastel momentan an einem FTP Client mit einer von CAsyncSocket abgeleiteten Klasse.
Funktioniert bis jetzt auch super mit Download resumen und allem.
Was mich nur stört ist, das sich bei mir die Connection und DataSockets alle auf eine Klasse beziehen und ich über das Sockethandle differenziere was beim recieven an die entsprechenden Funktionen der Dialogklasse weitergeleitet werden muss.Ich habe mir jetzt überlegt ich bastel alles um und versuche nen bischen den Code zu optimieren und erzeuge 2 abgeleitete Klassen (1x für Connection und 1x für Datasocket).
Bisher habe ich immer Membervariablen der abgeleiteten Klasse so angelegt:Header.h //Beispiel CMySocket m_ConnectionSocket; CMySocket m_DataSocket;
In der Dialogklasse konnte ich diese dann natürlich über:
//z.B. m_ConnectionSocket.Close(); m_ConnectionSocket.Create();
ansprechen.
Wenn ich das ganze umbastel würde ich allerdings lieber mit dem New Operator arbeiten.
In einer Funktion als nichtmembervariable geht das auch.MeineFunktion() { CMySocket* pConSocket = new CMySocket; pConSocket->Close(); pConSocket->Create(); delete pConSocket; }
Mach ich das ganze jedoch als Membervariable funzt es nichtmehr
// In der Headerdatei: CMySocket *m_pConSocket; // In der cpp Dialog::OnInitDialog()... { CMySocket *m_pConSocket = new CMySocket; } // In der Funktion { m_pConSocket->Close(); // FEHLER!! m_pConScoket->Create(); // FEHLER!! }
In der Oninit kann ich noch Createn in späteren Funktionen des Dialogs nichtmehr.
Er springt in diese FunktionBOOL CAsyncSocket::Socket(int nSocketType, long lEvent, int nProtocolType, int nAddressFormat) { ASSERT(m_hSocket == INVALID_SOCKET); // HIER KOMMT DIE EXCEPTION m_hSocket = socket(nAddressFormat,nSocketType,nProtocolType); if (m_hSocket != INVALID_SOCKET) { CAsyncSocket::AttachHandle(m_hSocket, this, FALSE); return AsyncSelect(lEvent); } return FALSE; }
Woran kann das liegen? Bitte um Hilfe!
Falls ich irgendwie im falschen Forum sein sollte - bitte verschieben!
Vielen Dank im voraus!!
Bye
-
Du hast zwei "CMySocket *m_pConSocket". Lerne zunächst C++.
Bye, TGGC (Dem beste BdT)
-
TGGC schrieb:
Du hast zwei "CMySocket *m_pConSocket". Lerne zunächst C++.
und bitte einen besseren stil. das ist doch unlesbar(und wenn ich das sage, soll das was heissen
)
-
TGGC schrieb:
Du hast zwei "CMySocket *m_pConSocket". Lerne zunächst C++.
Was meinste was ich gerade versuche...
In der Headerdatei kann ich ja keinen New Operator verwenden und nur in der Headerdatei kann ich membervariablen anlegen,oder?
Ich habe gehört das wenn ich im OnItDlg die Variablen initialisiere das dies einen Geschwindigkeitszuwachs für den Compiler bringt.
Werden normale Pointer ohne new operator nicht in den Stack geladen und Variablen die über new (malloc) angelegt werden in den Heap geladen?
otze schrieb:
und bitte einen besseren stil. das ist doch unlesbar(und wenn ich das sage, soll das was heissen )
Ich gebe mir äusserst mühe meinen Code gut lesbar zu gestalten, dies ist jedoch nur ein "Not copy paste" part den ich eingefügt habe, da ich dachte es wäre einfacher dann das Problem zu verstehen.
Wäre echt Klasse wenn mir jemand sagen könnte wie ich eine Membervariable mit New anlegen kann.
Über ein paar mehr info´s als wie "lerne zunächst c++" oder "bitte einen besseren stil" würde ich mich echt freuen.
Danke (is nich böse gemeint).
-
OK hab den Fehler gefunden.
Is ja klar:
CMySocket *m_pMySocket;
Existiert bereits und ich brauche da keinen cast mehr...
So gehts:
m_pMySocket = new CMySocket;
-
Was meinste was ich gerade versuche...
hmm einen möglichst schlechten weg zum lernen von C++ einzuschlagen?
bevor du mit irgendeiner api anfängst, sollten wenigstens die grundlagen sitzen.