Text aus Zwischenablage führt zu Absturz



  • Hallo,

    kann mir das mal jemand erklären...
    Ich lese hiermit den Text aus der Zwischenablage aus

    char * buffer; 
    if(OpenClipboard()) 
    { 
    	buffer = (char*)GetClipboardData(CF_TEXT); 
    	CloseClipboard();
    }
    

    Das weise ich dann einer Variable vom Typ CString zu, die mit einem Edit-Feld verknüpft ist

    CString m_sUrl = buffer;
    

    wenn der Text aus der Zwischenablage eine gültige URL ist, wird die Seite in einer Datei gespeichert

    // Namen einer temporären Datei ermitteln
    // und in m_strTmpFile speichern
    if (!GetTmpFileName())
    {
    	m_dwLastError = GetLastError();
    	return FALSE;
    }
    // Download starten und in Datei speichern
    
    m_strTmpFile = "C:\\test.dat";
    CInternetSession pInetSession; 
    CStdioFile*      pNetFile; 
    int nFileSize      = 0; 
    int nFileSizeBytes = 0; 
    int nBytesToWrite  = 0; 
    char cReadBuffer [512];
    try 
    { 
    	pNetFile = pInetSession.OpenURL(m_strUrl, 1, 
    				INTERNET_FLAG_TRANSFER_ASCII  | INTERNET_FLAG_RELOAD);
    	if (pNetFile == NULL)
    	{
    		m_dwLastError = GetLastError();
    		return FALSE;
    	}
    	nFileSizeBytes = (int) pNetFile->SeekToEnd(); 
    	pNetFile->SeekToBegin(); 
    	nFileSize = nFileSizeBytes / 1024; 
    
    	CFile pLocalFile(m_strTmpFile, 
       			     CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); 
    	while (nBytesToWrite = pNetFile->Read(cReadBuffer, 512)) 
    	{ 
    		pLocalFile.Write(cReadBuffer, nBytesToWrite); 
    	} 
    	pInetSession.Close();
    } 
    
    catch(CInternetException *IE) 
    { 	
    	return FALSE;
    }						 
    return TRUE;
    

    nun das Problem:
    wenn ich so verfahre gibt es immer beim Aufruf von SeekToEnd() eine Absturz... die CInternetException enthält dann die Fehlernummer 12016, die ich in der MSDN nicht gefunden hab... wenn ich aber den Text in das Edit-Feld von Hand eingebe (haargenau die gleiche URL, nur mit STRG+V eingefügt) funktioniert alles bestens.
    Hat jemand eine Idee woran das liegen kann? 😕

    Gruss,
    Michel



  • UpdateData(TRUE/FALSE) gemacht? Wenns dann immernoch nich geht, schieb den Source irgendwo hoch, dann schau ichs mir an



  • GetClipboardData liefert keinen Zeiger auf die Daten!
    Die Funktion liefert ein Handle, das du mit GlobalLock/GlobalUnlock "auflösen" kannst.


Anmelden zum Antworten