Zum Inhalt springen

wie heisst der hwnd handler in ms vc++


Free99

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

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:
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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üssen
Dann 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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...