String von XXXApp nach XXXDlg via SendMessage = MÜLL
-
Hallo,
die Handscannereingabe klappt jetzt so wies sein soll, stehe aber nun vor folgendem Problem:
In der XXXApp Klasse ist die
ProcessMessageFilter
Funktion und soll den String m_strXXX via
SendMessage
ans MainDialogWindow senden.
Nun ist ja bekannt daß Pointer nicht zwingend via SendMessage gesendet werden sollten (können), da beim Empfang nur Müll drinsteht. WM_COPYDATA ist ja eher für verschiedene Prozsse bzw. Applikationen da und trifft bei mir ja nicht zu.
Wie vermeide ich den Müllinhalt auf Empfängerseite? Geht da nur WM_COPYDATA zuverlässig?
Danke.
-
Per SendMessage kannst Du innerhalb des selben Prozesses versenden was Du willst. Da wird aber auch nichts zu "Müll"!
-
Ok dann mit Code:
BOOL CXXXApp::ProcessMessageFilter(int code, LPMSG lpMsg) { // TODO: Fügen Sie hier Ihren spezialisierten Code ein, und/oder rufen Sie die Basisklasse auf. CString strTemp = ""; if(lpMsg->message == WM_KEYDOWN) { if(lpMsg->wParam == VK_RETURN && m_bHandscannerAktiv) { memset(&m_chScanValue, 0, sizeof(m_strScanBuffer)); m_hwndMainDialog = m_pMainWnd->GetSafeHwnd(); SendMessage (m_hwndMainDialog, WMU_SCANNER, NULL, (LPARAM) &m_chScanValue); m_bHandscannerAktiv = FALSE; }
So, mach ich nun im Debug Mode einen Haltepunkt hier, sehe ich in
m_chScanValue
"schlechtes Ptr" in
m_strScanBuffer
den korrekten gescannten Wert, und in der Aufruffunktion
LRESULT XXXDlg::ScannerEingabe(WPARAM wParam, LPARAM lParam) { return true; }
bei lParam einen longwert und als &lParam steht Müll drin.