Text in die Zwischenablage kopieren



  • Um Text in die Zwischanablage zu kopieren benutze ich folgenden Funktion

    boolean CopyTexttoClipboard(HWND hWnd, char *text){
    
    	HGLOBAL			mem_block;
    	LPVOID				pointer;
    
    	mem_block = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, strlen(text) + 1);
    	if(!mem_block){
    		return FALSE;
    	}
    	pointer = GlobalLock(mem_block);
    	if(!pointer){
    		GlobalFree(mem_block);
    		return FALSE;
    	}
    	strcpy((LPSTR)pointer, text);
    	if(!GlobalUnlock(mem_block)){
    		u_int	error = GetLastError();
    		if((error != ERROR_NOT_LOCKED) && (error != 0)){
    			GlobalFree(mem_block);
    			return FALSE;
    		}
    	}
    	OpenClipboard(hWnd);
    	EmptyClipboard();
    	SetClipboardData(CF_TEXT, mem_block);
    	CloseClipboard();
    //	GlobalFree(mem_block);		//diese Zeile bereitet Probleme
    	return TRUE;
    }
    

    Da ich der Annahme bin einen GlobalAlloc Aufruf muss ich auch wieder mit GlobalFree freigeben habe ich den Code eben wie oben dargestellt angewand nur die Auskommentierte Zeile war nicht auskommentiert. Leider musste ich feststellen, daß jeder 2te Aufruf der Funktion fehlschlug und kein Text in der Zwischenablage vorhaden war. Nach einiger Suche bin ich darauf gestossen die Zeile auszukommentieren und der Code funktioniert bei jedem Aufruf.

    Mach ich das jetzt richtig, wenn nein, wie geht's den nun richtig?



  • http://msdn.microsoft.com/en-us/library/ms649051(VS.85).aspx

    Das System verwaltet die Freigabe des Puffers.



  • Danke, habs dann auch in der MSDN entdeckt.


Log in to reply