Nachhilfe Headerdateien und WinMain



  • Hallo Leute,
    ich möchte mich mit directX und C++ Programmierung unter Windows beschäftigen.

    Szenario:
    Als Leitfaden nutze ich ein Buch namens "3D Spiele mit DirectX und C++ in 21 Tagen". Soweit funktioniert es auch, wenn ich mich an das Buch halte.
    Ich wollte nun meinen Code anpassen und optimieren und dabei einige Dinge in Headerdateien schreiben. Dabei entsteht bei mir Verwirung und Wissenslücken kommen zum Vorschein.

    Problem:
    Wenn ich die WinMain - Funktioen aus meiner *.cpp Datei in meiner Headerdatei deklariere bekomme ich folgenden Fehler:

    MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgel÷stes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".

    Der Code zum Fehler in *.h:

    [...]
    public:
    int WINAPI WinMain (HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow);
    [...]
    

    Der Code zum Fehler in *.cpp:

    [...]
    int WINAPI GameMain::WinMain (HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR	lpcmdline, int ncmdshow)
    {
    [...]
    

    Fragen:
    ist es gewollt, dass die WinMain nicht in der Headerdatei steht oder mach ich was falsch?

    Nutz man bei visual c++ keine Namensräume wie: "Klasse::Funktion(){}"?

    Welches Thema sollte ich mir nochmal genauer anschauen um Klarheit zu bekommen (Namensräume, Header-Konzept, ...)?

    Danke schonmal an alle!
    G0r01ü0ß1e Meho.



  • WinMain() muss im globalen Gültigkeitsbereich definiert werden, weil das der Compiler eben so erwartet. Mit Header-Dateien hat das nicht zu tun. Also raus damit aus GameMain oder wenn du das nicht möchtest, schreibe eine WinMain() und ruf in dieser GameMain::WinMain() auf.

    Übrigens brauchst diese Funktion üblicherweise nicht zu deklarieren. Das gilt auch für main() , wmain() , DllMain() und wWinMain() .


Log in to reply