Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [C] WIN32 Porta seriale / SetDlgItemText

    Ho un problema strano

    codice:
    strncpy(buffer,"Opening port",256);
    					
    SetDlgItemText(hwnd,IDC_LBL_STATE,buffer);
    
    					
    serial = CreateFile("COM1",
                GENERIC_READ | GENERIC_WRITE,
                0,
                NULL,
                OPEN_EXISTING,
                0,
                0);
    
    if(serial ==INVALID_HANDLE_VALUE) {
    					  
    	serial = serial;
    
    }
    buffer e serial sono allocati come

    codice:
    char buffer[256];
    HANDLE serial;
    Ora, se commento la chiamata a SetDlgItemText tutto fila liscio.
    Se invece la abilito il programma crasha.

    In debug ho visto che con la SetDlgItemText commentata, dopo la CreateFile, serial contiene un indirizzo di memoria 'buono', tipo 0x07a4
    Con la SetDlgItemText riabilitata, dopo la CreateFile la variabile serial contiene 0xffffffff.

    L'ultima if ha evidentemente solo funzioni di debug

    Che succede?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il problema è qui.

    strncpy(buffer,"Opening port",256);

    non devi passare la lunghezza del buffer, ma quella della stringa da copiare.

    strncpy(buffer,"Opening port",strlen("Opening port")); ricordando che il NULL NON viene copiato.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    no è lo stesso

    non mi apre l'handle alla seriale se scrivo nel controllo

  4. #4
    Scusa ma serial=serial è un'istruzione inutile.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Grazie della puntualizzazione

    ahauhauah

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Controlla il valore di ritorno della SetDlgItemText, usa anche GetLastError() e FormatMessage per avere una stringa contenente l'errore.

    Altro non si può dire con quel poco codice che hai postato. (Supposto che hwnd sia un handle valido.)

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    SetDlgItemText restituisce 1
    hwnd è un handle valido

    il codice che ho postato è praticamente tutto il codice...almeno, tutto il codice che fa qualcosa

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Aspetta un attimo azz

    Effettivamente. immediatamente dopo aver chiamato setdlgitemtext, GetLastError mi restituisce 5 che equivale alla stringa "Access is denied"

    codice:
    ret = SetDlgItemText(hwnd,IDC_LBL_STATE,buffer);
    Ho appena provato a modificare in questo modo

    codice:
    ret = SetDlgItemText(hwnd,MAKEINTRESOURCE(IDC_LBL_STATE),buffer);
    La prima volta ha funzionato, poi non più


  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Ho dimenticato di dire una cosa
    Il controllo in questione è una static label

    Ora ho provato a sostituirla con un edit box e sembra che non si presenti piu questo problema..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.