Meldungsfenster mit formatiertem Text|Fehler



  • #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    
    #define hi HINSTANCE
    #define t TEXT
    
    int CDECL MessageBoxPrint (TCHAR * szCaption, TCHAR szFormat, ...)
    {
              TCHAR szBuffer[1024];
              va_list pArgList;
    
              va_start(pArgList, szFormat);
              _vsntprintf (szBuffer, sizeof(szBuffer) / sizeof(TCHAR) , szFormat, pArgList);//
              va_end(pArgList);
              return MessageBox(NULL, szBuffer, szCaption, 0);
    
    }
    
    int WINAPI WinMain (hi hInstance, hi hPreInstance, PSTR hCmdLine, int iCmdShow)
    {
               int cxScreen, cyScreen;
               cxScreen = GetSystemMetrics(SM_CXSCREEN);
               cyScreen = GetSystemMetrics(SM_CYSCREEN);
    
               MessageBoxPrintf (t ("ScrnSizze"), t ("Ihr Desktop hat eine Höhe von %i und eine Breite von %i Pixeln"), cxScreen, cyScreen);
    
               return 0;   
    }
    

    Fehlermeldung:

    C:\***\HelloMsg.cpp(14) : error C2664: '_vsnprintf' : Konvertierung des Parameters 1 von 'char *[1024]' in 'char *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    
    C:\***\HelloMsg.cpp(16) : error C2664: 'MessageBoxA' : Konvertierung des Parameters 2 von 'char *[1024]' in 'const char *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    
    C:\***\HelloMsg.cpp(28) : error C2065: 'MessageBoxPrintf' : nichtdeklarierter Bezeichner
    Fehler beim Ausführen von cl.exe.
    
    Petzold.exe - 3 Fehler, 0 Warnung(en)
    

    Das ist der Code vom Pezold, seite 42. müsste eigendlich Funktionieren



  • #define hi HINSTANCE
    #define t TEXT
    

    LOL!



  • IpOperator schrieb:

    Fehlermeldung:

    C:\***\HelloMsg.cpp(14) : error C2664: '_vsnprintf' : Konvertierung des Parameters 1 von 'char *[1024]' in 'char *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    
    C:\***\HelloMsg.cpp(16) : error C2664: 'MessageBoxA' : Konvertierung des Parameters 2 von 'char *[1024]' in 'const char *' nicht moeglich
            Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    

    zeiger übergeben

    int CDECL MessageBoxPrint (TCHAR * szCaption, TCHAR *szFormat, ...)
    

    IpOperator schrieb:

    Fehlermeldung:

    C:\***\HelloMsg.cpp(28) : error C2065: 'MessageBoxPrintf' : nichtdeklarierter Bezeichner
    Fehler beim Ausführen von cl.exe.
    

    MessageBoxPrintf != MessageBoxPrint
    funktionsnamen überprüfen :xmas2:



  • @Fehler 1/2: Da scheint irgendwas bei deiner Deklaration von szBuffer nicht zu stimmen - irgendwo ein '*' zu viel?

    @Fehler 3: Da ist das 'f' beim Funktionsaufruf zu viel (oder bei der Definition zu wenig) - du hast eine Funktion MessageBoxPrint() und rufst die MessageBoxPrintf() auf.



  • so, das hab ich verbessert.

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    
    int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)
    {
              TCHAR szBuffer[1024];
              va_list pArgList;
    
              va_start(pArgList, szFormat);
              _vsntprintf (szBuffer, sizeof(szBuffer) / sizeof(TCHAR), szFormat, pArgList);
              va_end (pArgList);
              return MessageBox(NULL, szBuffer, szCaption, 0);
    
    }
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow)
    {
               int cxScreen, cyScreen;
               cxScreen = GetSystemMetrics(SM_CXSCREEN);
               cyScreen = GetSystemMetrics(SM_CYSCREEN);
    
               MessageBoxPrintf (TEXT("ScrnSizze"), TEXT("Ihr Desktop hat eine Höhe von %i und eine Breite von %i Pixeln"), cxScreen, cyScreen);
    
               return 0;   
    }
    

    Fehlermeldung:

    LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
    Debug/HelloMsg.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    

    😕 😕



  • hmm.... mit dem aktuellen devc++ geht es.
    vielleicht ist meine VC++ Version dafür zu alt 😃



  • du musst ein windows anwendung erstellen keine konsolen anwendung.
    aber da die anwendung eher trivial ist würde eine konsolenanwendung auch ausreichen, dann müsstest du allerdins

    int main(int argc, char *argv[]) { /*code*/ }
    

    schreiben

    [edit]
    rechtschreibung



  • ich hab eine windows anwendung dafür benutzt...
    wenn ich ne konsolenanwendung starte, so kommt z.B. die Meldung der MessageBox doch, allerdings taucht dann dahinter eine konsole auf. das tut da nichts zur sache 😉


Anmelden zum Antworten