Funktioniert nicht



  • ich will zuerst etwas einfügen und dann wieder auslesen.
    Das auslesen funktioniert ( wenn ich mit einem anderen Programm was reinkopiere)
    aber wenn ich erst LOL einlese und dann ausgebe stürzt das Programm ab.

    //Die variablanen sind
     //    HGLOBAL hGlobal;
    	// PTSTR pGlobal;
    //     static PTSTR pText;
    		  case ID_BEARBEITEN_EINF40001:
    			   pText = TEXT("LOOOL");
    			   hGlobal = GlobalAlloc(GHND | GMEM_SHARE, (lstrlen(pText)+1)*sizeof(TCHAR));
    	       	   pGlobal = (PTSTR)GlobalLock(hGlobal);
    		       lstrcpy(pGlobal, pText);
    		       GlobalUnlock(hGlobal);
    		       OpenClipboard(hwnd);
    		       EmptyClipboard();
    		       SetClipboardData(CF_TCHAR, hGlobal);
    		       CloseClipboard();
    			   return 0;
    		  case ID_BEARBEITEN_KOPIEREN:
    			   if(IsClipboardFormatAvailable(CF_TCHAR))
    		       {
    		       OpenClipboard(hwnd);
    		       if(hGlobal = GetClipboardData(CF_TCHAR))
    		   	   {
    			      pGlobal = (PTSTR)GlobalLock(hGlobal);
    				  if(pText)
    				  {
    				      free(pText);
    					  pText = 0;
    				  }
    				  pText = (PTSTR)malloc(GlobalSize(hGlobal));
    			      lstrcpy(pText, pGlobal);	  
    			  }
    			  GlobalUnlock(hGlobal);
    			  CloseClipboard();
    			  MessageBox(0, pText, TEXT("Die Zwischenablage"), 0);
    	     	  }
    			   return 0;
    


  • pText = TEXT("LOOOL");
    

    wenn ich das Entferne geht es aber pText ist doch die Variable die den Text aufnimmt??



  • Gucksu hier:

    static PTSTR pText;
    

    und hier:

    pText = TEXT("LOOOL");
    

    ^^

    Was aufgefallen ? Du hast einen Zeiger deklariert, dem du aber keinen Speicherplatz zugewiesen hast :p
    In der zweiten Zeile, versuchst du in den Speicher reinzuschreiben, dein Zeiger zeigt aber noch auf nix...

    -> CRASH

    Besser dazwischen :

    pText = malloc (128);
    

    oder so... 😉

    Denke ich jetzt zumindest mal, ich weiß ja nicht, ob du deinem String vorher nen Speicherbereich zugewiesen hast.

    Greetz
    Xzi-bit



  • vielen dank jetz klappt es 🙂



  • im Bezug mit der Zwischenablage hätte ich noch eine Frage:
    Was genau bringt WM_SIZECLIPBOARD W_PAINTCLIPBOARD und die ganzen Clipboard messages die es auch im normal gibt WM_SIZE? Was soll das bringen und wozu ist es gut?


Anmelden zum Antworten