Programm welches Text in die Zwischenablage kopiert. Ein Laufzeitbug den ich mir nicht erklären kann



  • Hallo,

    ich habe ein Programm geschrieben für die Benutzeroberfläche Windows XP. In diesem Programm (Dialogfeld) sind mehrere Button hinterlegt und wenn man drauf klickt wird ein bestimmter Text in die Zwischenablage kopiert um es problemlos in andere Programme einfügen zu können.

    Auszug aus dem Quellcode !

    CString strtmpjahr="Jahr",strtmpmonat="Monat";
    	if (m_combojahr.GetCurSel() != CB_ERR ||
    		m_combomonat.GetCurSel() != CB_ERR)
    	{
    		m_combojahr.GetLBText(m_combojahr.GetCurSel(),strtmpjahr);
    		m_combomonat.GetLBText(m_combomonat.GetCurSel(),strtmpmonat);
    	}
    	CString strstring=m_streditbenutzername+" blablub "+strtmpmonat+"/"+strtmpjahr+" blablub ";
    	if(OpenClipboard())
    	{
    		HGLOBAL clipboardbuffer;
    		char * buffer;
    		EmptyClipboard();
    		clipboardbuffer = GlobalAlloc(GMEM_DDESHARE, strstring.GetLength()+1);
    		buffer = (char*)GlobalLock(clipboardbuffer);
    		strcpy(buffer, LPCSTR(strstring));
    		GlobalUnlock(clipboardbuffer);
    		SetClipboardData(CF_TEXT,clipboardbuffer);
    		CloseClipboard();
    	}
    

    Jetzt das Problem: Selten existiert das Problem das man die in die Zwischenablage kopierten Daten nicht in ein anderes Programm bekommt. Weil man klickt auf den Button und die Zwischenablage wird gefüllt mit den Daten, aber wenn man diese Daten einfügen möchte gehts nicht weil diese Daten nicht übernommen werden (z.B. in MS Word). Vielleicht kann mir hier einer weiterhelfen wie ich diesen Bug beheben kann ?

    EinNeuling



  • Eine direkte Lösung habe ich nicht, aber...

    ...du verwendest bei GlobalAlloc GMEM_DDESHARE. Lies mal die Doku! Dieses Flag ist nur noch für Legacy-Unterstützung vorhanden und wird ignoriert.

    ...du überprüfst keinerlei Rückgabewerte. Mach das mal! Vielleicht geht ja irgendein Aufruf schief und du kriegst es nicht mit. Außerdem kannst du bei einigen Funktionen je nach Rückgabe mit GetLastError eine genauere Fehlerbeschreibung bekommen.



  • Danke dir für den Tipp _matze.


Log in to reply