Free99 Geschrieben 20. Oktober 2005 Geschrieben 20. Oktober 2005 Hi, ich hab mich jetz schon dumm und dämlich gesucht, sowohl in meinem Quelltext als auch im msdn. Ich hoffe ihr könnt mir helfen. Schonmal vorweg: Ich bin ein Nap und komme eigentlich aus Richtung PHP . Ich versuche die Daten von einem RS232 Barcode Scanner (COM Port) zu lesen und in eine ListBox einzufügen. Das lesen funktioniert einwandfrei, habe den Sourcecode von einem anderen Programm benutzt, es schreibt allerdings in ein Editfenster. ptrDlg->SetDlgItemText(IDC_MONITOR_REC,outPut); Diese Zeile ist dafür verantwortlich. Ich habe nun versucht das ganze per "SendMessage()" zu realisieren und das sah wie folgt aus: HWND hListBox; SendMessage(hListBox, LB_ADDSTRING, 0, outPut); Dabei gab es den Fehler: "error C2664: 'SendMessageA' : Konvertierung des Parameters 4 von 'class CString' in 'long' nicht moeglich Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden" dann habe ich folgende Änderung vorgenommen: (hListBox in meiner SerialDlg.h deklariert) test = atol(outPut); SendMessage(ptrDlg->hListBox, LB_ADDSTRING, 0, test); Problem jetzt: Das Programm stürzte ab. Meine Vermutung: Das Programm weiss nicht was hListBox ist also hab ich folgenden Code verwendet(sorry wenn ich ein wenig in den Dateien rumspringe, sind grad in der SerialDlg.cpp): hListBox = GetDlgItem(hWnd, IDC_CODE_LIST);//IDC_CODE_LIST ist die ListBox so und nun fehlt mir natürlich hWnd, keine Ahnung wo ich das herbekomme. Wenn ich es normal deklariere: HWND hWnd; Bekomme ich nen Fehler, wenn ichs nicht tue, logischerweise auch. evtl. findet ihr noch mehr Fehler (wäre ja kein Wunder) oder den Fehler an einer anderen Stelle, bin verzweifelt. Danke schonmal im Voraus! Zitieren
jma Geschrieben 20. Oktober 2005 Geschrieben 20. Oktober 2005 wenn ich dich richtig verstanden habe ließt dein Programm die Daten vom Scanner ein und du willst diese nun in eine Listbox eintragen. außerdemgehe davon aus das du vc++ 6 verwendest. leg dir doch ne membervariable z.b. mylistbox (mit dem klassenassistenten) zu der Listbox an, als kategorie nimmst du CListbox nicht CString. danach solltest du den output des scanners in der form in die listbox eintragen können. mylistbox.AddString(xy); xy ist ein CString, d.h. der output sollte in nen cstring bzw.char[111] vorliegen Zitieren
Free99 Geschrieben 20. Oktober 2005 Autor Geschrieben 20. Oktober 2005 Deine Annahmen sind korrekt. also Kategorie: Control und Variablentyp: CListBox (was anderes gibts eh nicht zur Auswahl^^) mein Code sieht dann so aus: m_code_list.AddString(outPut); Fehler: error C2065: 'm_code_list' : nichtdeklarierter Bezeichner error C2228: Der linke Teil von '.AddString' muss eine Klasse/Struktur/Union sein Das Include für die Header Datei, in der m_code_list deklariert wird ist in dieser Datei aufgeführt #include "serialAppDlg.h" Und die Variable ist im public, also müsste sie der Methode doch bekannt sein oder? Trotzdem kommt der o.g. Fehler... Zitieren
jma Geschrieben 20. Oktober 2005 Geschrieben 20. Oktober 2005 klingt erstmal korrekt hmm vielleicht hast dich irgendwo vertippt, hab dir mal mein beispiel in den anhang gepackt, ansonsten schick mir mal dein code, dann schau ich mir das an gruß jma Zitieren
Free99 Geschrieben 20. Oktober 2005 Autor Geschrieben 20. Oktober 2005 entweder ich bin blöd, blind oder es gibt keinen Anhang Zitieren
Free99 Geschrieben 20. Oktober 2005 Autor Geschrieben 20. Oktober 2005 liegt es vielleicht daran dass die serialThread.cpp in einem dazugeladenen Projekt ist und nicht in dem Projekt, in dem der Dialog ist? Wäre es ohne Probleme möglich die Dateien des 2. Projekts in das erste einzufügen? Code hier reinstellen ist ungünstig, bin da leider an mein Unternehmen gebunden //edit die serialThread.cpp ist die Datei, in der von der RS232 Schnittstelle gelesen wird. //edit2 hab alles rüberkopiert und den Eintrag #include "StdAfx.h" in die serialThread.cpp eingefügt, gleicher Fehler wie oben //edit3 warum zum Geier kann man das Topic nich ändern ^^ Zitieren
Klotzkopp Geschrieben 20. Oktober 2005 Geschrieben 20. Oktober 2005 Ich nehme an, das m_code_list eine Membervariable deiner Dialogklasse ist. Um von außen auf diese Variable zugreifen zu können, reicht es nicht aus, wenn sie public ist. Du brauchst auch eine Instanz (oder ein Zeiger oder eine Referenz) dieser Dialogklasse. Aus einem anderen Thread solltest du aber sowieso keine Methoden von MFC-Steuerelementen aufrufen. Die sind diesbezüglich nicht sicher. //edit3 warum zum Geier kann man das Topic nich ändern ^^Du hättest mir ja auch einfach eine PN schicken können... :hells: Zitieren
Free99 Geschrieben 20. Oktober 2005 Autor Geschrieben 20. Oktober 2005 Sagen wir mal ich hab von deinem Post hauptsächlich Bahnhof verstanden Ich bin einer der Deppen die sich Quellcode nehmen (wenn sie keine Ahnung haben) ihn versuchen so zu basteln, dass es passt und hoffen dass es Funktioniert. Leider ist es in meinem Fall schief gelaufen... m_code_list ist member von IDC_CODE_LIST (Listbox im Dialogfeld) ok... ich seh grad ich hab da ja nen Zeiger "ptrDlg->" jetz läuft das Programm auch, es liest auch in die ListBox ein, jedoch mit 2 Abschlusszeichen (sehen aus wie ne dicke Pipe |) die da raus müssen und beim Beenden schmiert es mit dieser Debug Message Box ab... ich hoff ihr wisst was ich meine?! //edit und was meinst du mit "unsicher"? und wie bekomme ich es "sicher" ? Hab nicht dran gedacht eine PN zu schicken Zitieren
Klotzkopp Geschrieben 20. Oktober 2005 Geschrieben 20. Oktober 2005 Ich bin einer der Deppen die sich Quellcode nehmen (wenn sie keine Ahnung haben) ihn versuchen so zu basteln, dass es passt und hoffen dass es Funktioniert.Diese Vorgehensweise wird dich nicht weit bringen. jetz läuft das Programm auch, es liest auch in die ListBox ein, jedoch mit 2 Abschlusszeichen (sehen aus wie ne dicke Pipe |) die da raus müssenDann schneid sie doch ab, bevor du sie in die Listbox schreibst. und beim Beenden schmiert es mit dieser Debug Message Box ab... ich hoff ihr wisst was ich meine?!Ich weiß, welche Art Message du meinst, aber von deinen gibt es hunderte. Der genaue Text wäre schon hilfreich. und was meinst du mit "unsicher"?Das habe ich doch geschrieben: Du sollst MFC-Steuerelementmethoden (wie CListBox::AddString) nicht aus einem anderen Thread als dem, der das Steuerelement erstellt hat, aufrufen. und wie bekomme ich es "sicher" ?Mit PostMessage zum Beispiel. Zitieren
Free99 Geschrieben 20. Oktober 2005 Autor Geschrieben 20. Oktober 2005 Diese Vorgehensweise wird dich nicht weit bringen. Ist mir bewusst, aber da ich Fachinformatiker Systemintegration lerne reicht es mir wenn ich Code kopiere, ich hasse es selber (in PHP Projekten) wenn jmd. Code kopiert, hier gehts leider nicht anders, da ich das Projekt sonst sein lassen könnte und leider muss ich es machen... Mir ist VC++ zu komplex um es von Adam bis Eva zu lernen Dann schneid sie doch ab, bevor du sie in die Listbox schreibst. Ich werds versuchen hinzubekommen, wenn ich Probleme hab oder nichts finde, schreib ich hier ins Forum Ich weiß, welche Art Message du meinst, aber von deinen gibt es hunderte. Der genaue Text wäre schon hilfreich. Das habe ich doch geschrieben: Du sollst MFC-Steuerelementmethoden (wie CListBox::AddString) nicht aus einem anderen Thread als dem, der das Steuerelement erstellt hat, aufrufen. dh. ich müsste den Code aus der serialThread.cpp in meine serialAppDlg.cpp kopieren? Mit PostMessage zum Beispiel. dazu werde ich mich mal schlau machen, aber für heute reichts Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.