Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [c++] creare gui con win32 api...stack corrupted error..sono principiante..aiutatemi

    salve a tutti... sto provando per la prima volta un programma con interfaccia grafica in c++...ho usato il c++ per poco solo con la console però un'idea del funzionamento me lo sono fatto...per creare l'interfaccia grafica sto seguendo qusta guida che mi è sembrata molto completa..
    seguendo il loro esempio ottengo un programma cosi:
    Codice PHP:
    #define STRICT
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <string>
    BOOL CALLBACK unaDlgProc(HWND hwndDlgUINT uMsgWPARAM wParamLPARAM lParam)
    {
    if(
    uMsg==WM_CLOSE)
    {
    EndDialog(hwndDlg0);
    return 
    TRUE;
    }
    else if(
    uMsg==WM_COMMAND)
    {
    WORD wNotifica HIWORD(wParam);
    WORD wId LOWORD(wParam);
    if(
    wNotifica == STN_CLICKED && wId == 101)
    {
    HWND hStat = (HWND)lParam;
    char buff[6];
    const 
    charpTesto;
    SendMessage(hStatWM_GETTEXT6, (LPARAM)buff);
    if(
    buff[0]=='C'pTesto "Salve";
    else 
    pTesto "Ciao!";
    SendMessage(hStatWM_SETTEXT0, (LPARAM)pTesto);
    return 
    TRUE;
    }
    }
    return 
    FALSE;
    }
    int WINAPI WinMain(HINSTANCE hInstHINSTANCE hPrevInstLPSTR lpCmdLineint nCmdShow) {
    DialogBoxParam(0,L"MioDialogo",0,unaDlgProc,0); return 0;

    con questo che è il file dell'interfaccia grafca (MIODIALOGO.rc)
    Codice PHP:
    #include <windows.h>
    MioDialogo DIALOG DISCARDABLE 0018692
    STYLE DS_MODALFRAME 
    WS_POPUP WS_CAPTION WS_SYSMENU
    CAPTION 
    "Un Dialogo vuoto"
    FONT 8"MS Sans Serif"
    BEGIN
    CONTROL 
    "Ciao!"101"STATIC"SS_CENTER|WS_BORDER|SS_NOTIFY60404010
    END 
    però quando lo eseguo e clicco sul label con la scritta "Ciao!" ricevo questo errore:
    Run-Time Check Failure #2 - Stack around the variable 'buff' was corrupted.
    e la variabile ptesto contiene una serie di caratteri cinesi...
    per fare il programma uso visual studio 2008 in un progetto win32..dove sbaglio? come posso risolvere?

  2. #2
    Su MSDN leggo:


    wParam
    Specifies the maximum number of TCHARs to be copied, including the terminating null character.

    Windows NT/2000/XP:ANSI applications may have the string in the buffer reduced in size (to a minimum of half that of the wParam value) due to conversion from ANSI to Unicode.
    mi sa che ti conviene usare TCHAR come tipo invece di char per il tuo buffer perchè penso che per default devi usare i caratteri unicode. Di conseguenza devi racchiudere tutti i literal string con la macro _T() del tipo

    TCHAR * pippo = _T("ciao")

  3. #3
    adesso mi visualizza i caratteri giusti ma l'errore mi esce lo stesso!
    come è possibile?

  4. #4
    Puoi postare il codice modificato? Nelle proprietà del progetto hai impostato l'uso di caratteri ANSI o Unicode?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    ecco il nuovo codice:

    Codice PHP:
    #define STRICT
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <string>
    #include <tchar.h>
    BOOL CALLBACK unaDlgProc(HWND hwndDlgUINT uMsgWPARAM wParamLPARAM lParam)
    {
    if(
    uMsg==WM_CLOSE)
    {
    EndDialog(hwndDlg0);
    return 
    TRUE;
    }
    else if(
    uMsg==WM_COMMAND)
    {
    WORD wNotifica HIWORD(wParam);
    WORD wId LOWORD(wParam);
    if(
    wNotifica == STN_CLICKED && wId == 101)
    {
    HWND hStat = (HWND)lParam
    char buff[6]; 
    TCHAR pTesto
    SendMessage(hStatWM_GETTEXT6, (LPARAM)buff); 
    if(
    buff[0]=='C'pTesto _T("Salve"); 
    else 
    pTesto _T("Ciao!"); 
    MessageBox(0, (LPCWSTR)pTesto, (LPCWSTR)buffMB_OK);
    SendMessage(hStatWM_SETTEXT0, (LPARAM)pTesto); 
    return 
    TRUE
    }
    }
    return 
    FALSE;
    }
    int WINAPI WinMain(HINSTANCE hInstHINSTANCE hPrevInstLPSTR lpCmdLineint nCmdShow) {
    DialogBoxParam(0,L"MioDialogo",0,unaDlgProc,0); return 0;

    i caratteri non gli ho modificati quindi sono unicode...

  6. #6
    char buff diventa TCHAR buff

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.