Fehler beim Kompilieren



  • Mal ne Frage:
    Bin neu auf dem Gebiet C++
    Hab ne MFC(Dialogbasierend) mit 2 Editfeldern,1Button
    -------------------
    IDC_NAME
    IDC_SERIAL
    ID_Generate
    -------------------
    Wenn ich das jetzt kompilieren will:
    ----------------------------------------------------------------
    void CPasswordDlg::OnGenerate()
    ;UINT GetDlgItemText(

    HWND hDlg, // handle of dialog box
    int nIDDlgItem, // identifier of control
    LPTSTR lpString, // address of buffer for text
    int nMaxCount // maximum size of string
    );

    int ;Password(HWND hwnd)
    {

    char name[26] = "";
    char result[9] = "";
    int i, j, len;
    unsigned long serial1 = 0, serial2 = 0;
    unsigned long temp = 0, arg = 0, shit = 0, ctrl = 0;

    GetDlgItemText(hwnd, IDC_NAME, name, 26);
    len = strlen(name);

    while(name[len-1] == ' ') len--;

    name[len] = 0x00;

    while(name[0] == ' ') for(i = 0; i < len; ++i) name[i] = name[i+1];

    len = strlen(name);

    if(len == 0)
    {
    SetDlgItemText(hwnd, IDC_SERIAL, "Please enter your name!");
    return 1;
    }
    else if(len > 25)
    {
    SetDlgItemText(hwnd, IDC_SERIAL, "Name has to be less than 26 chars.");
    return 1;
    }

    for(i = 0; i < len; ++i) serial1 += name[i] * i;

    for(i = 0; i < len; ++i)
    {
    arg = name[i] << 8;

    for(j = 0; j < 8; ++j)
    {
    temp = serial2;
    temp ^= arg;
    ctrl = temp & 0x8000;
    if(ctrl == 0)
    {
    serial2 <<= 1;
    arg <<= 1;
    }
    else
    {
    serial2 += serial2;
    serial2 ^= 0x1000;
    arg <<= 1;
    }
    }
    }

    serial2 += 0x50;
    serial2 %= 0x10000;

    wsprintf(result, "%.4X%.4X", serial2, serial1);
    SetDlgItemText(hwnd, IDC_SERIAL, result);

    return 0;
    }
    // kommt folgende Fehlermeldung:
    --------------------Konfiguration: Password - Win32 Debug--------------------
    Kompilierung läuft...
    PasswordDlg.cpp
    C:\c++test2\New\Password\PasswordDlg.cpp(183) : error C2373: 'GetDlgItemTextA' : Neudefinition; unterschiedliche Modifizierer
    c:\programme\microsoft visual studio\vc98\include\winuser.h(3515) : Siehe Deklaration von 'GetDlgItemTextA'
    C:\c++test2\New\Password\PasswordDlg.cpp(185) : warning C4091: '' : Ignoriert auf der linken Seite von 'int', wenn keine Variable deklariert wurde
    Fehler beim Ausführen von cl.exe.

    Password.exe - 1 Fehler, 1 Warnung(en)
    --------------------------------------------------------------------------------
    Wo liegen die Fehler und muß man nicht erst wie in VB die Editfelder deklarieren wie:
    Dim Text1.Text As String
    Dim Text2.Text As ........

    ???

    Wäre über Anregungen und Fehlerbehandlungen Eurerseits begeistert!!!

    mfg
    Pavel C.



  • Keiner eine Idee?

    mfg
    Pavel



  • mach mal das semikolon in int ;Password(HWND hwnd) raus.

    und welchen sinn hat

    UINT GetDlgItemText( 
    
    HWND hDlg, // handle of dialog box 
    int nIDDlgItem, // identifier of control 
    LPTSTR lpString, // address of buffer for text 
    int nMaxCount // maximum size of string 
    );
    

    ? steht sowas nicht berits in der <windows.h>? ich denke, das stück sollt ersatzlos gestrichen werden.



  • Hi

    void CPasswordDlg::OnGenerate();
    

    Dieser Code macht so wenig Sinn. 😉

    UINT GetDlgItemText( 
    
    HWND hDlg, // handle of dialog box 
    int nIDDlgItem, // identifier of control 
    LPTSTR lpString, // address of buffer for text 
    int nMaxCount // maximum size of string 
    );
    

    Dieser Code auch (Die Funktion ist schon durch windows.h bzw afxwin.h deklariert, deshalb die Fehlermeldung.)

    Dann ist dir noch ein ; bei int; Password reingerutscht.

    int;
    

    ist zwar prinzipiell richtig, ist aber überflüssig 😉

    Versuchs dann nochmal.

    Grüße Rapha
    <edit>Oh, da hat noch jemand geantwortet 🙂 </edit>



  • Danke für die Antworten
    -----------------------------------
    void CPasswordDlg::OnGenerate();
    Dieser Code macht so wenig Sinn
    -----------------------------------
    Wie würde es denn aussehen wenn es Sinn macht?
    Stimmt was mit dem "void" nicht?
    Oder was kommt rein beim Button-Klick

    mfg
    Pavel



  • Hi

    mit wenig Sinn meine ich, dass du die Methode CPasswordDlg::OnGenerate() definieren musst nicht nocheinmal deklarieren:

    void CPasswordDlg::OnGenerate()
    {
       MessageBox("Es wurde auf den Generierenbutton geklickt");
    }
    

    Grüße Rapha



  • Hi

    mit wenig Sinn meine ich, dass du die Methode CPasswordDlg::OnGenerate() definieren musst nicht nocheinmal deklarieren:

    void CPasswordDlg::OnGenerate()
    {
       MessageBox("Es wurde auf den Generierenbutton geklickt");
    }
    

    Grüße Rapha



  • Tja ich werd nicht schlau draus 😕
    Und Wie definiere ich das nun???

    mfg
    Pavel



  • 😃

    Soetwas habe ich gemeint:

    void CPasswordDlg::OnGenerate()
    {
       MessageBox("Es wurde auf den Generierenbutton geklickt");
    }
    

    Beispiel:
    Das ist eine Deklaration der Funktion test:

    void test(char* pszTest);
    

    Das ist eine Definition:

    void test(char* pszTest)
    {
       AfxMessageBox(pszTest);
       // oder was anderes
    }
    

    Wenn du eine Funktion nur deklarierst und nicht definierst, bekommst du einen Compilerfehler, wenn du die Funktion aufrufen willst (ist ja logisch).

    Das habe ich gemeint 😃

    Grüße Rapha


Anmelden zum Antworten