Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16"
-
Hallo

Wie kann ich die Funktion int WINAPI WinMain(..) in eine Klasse reinpacken?
Bei meinem Code:
#ifndef MAIN_H #define MAIN_H class Loader { private: HWND hWnd; WNDCLASS wc; MSG msg; public: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); }; #endif#include <windows.h> #include "main.h" int WINAPI Loader::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { MessageBox(NULL, "Hallo.", "Titelleiste", MB_OK); return 0; }kommt immer so eine eigenartige Fehlermeldung raus:
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".Versteh ich irgendwie nicht

-
Ganz einfach: Es gibt keine Funktion WinMain, sondern nur eine Funktion Loader::WinMain. Die haben miteinander nichts zu tun.
Der Einsprungpunkt muss eine freie Funktion sein, eine C-Signatur haben und (lt. Standard) main() oder main(int, char*[]) heissen, bei WinAPI-Anwendungen eben WinMain(...). Im Falle von main sorgt ein C++-Compiler automatisch für die C-Signatur, im Falle von WinMain weiss ich es nicht.
Fakt ist jedoch: Main in eine Klasse zu packen wird Dir nicht gelingen. Auch nicht als statische Funktion.
-
und die wndproc?
-
Vorweg:
Die Main geht nicht in eine Klasse.
Die WndProc hingegen schon, doch dies kann eine ziemliche Fuddelei werden.
Ich habe es einmal über tausende Umwege hinbekommen und dann nur noch kopiert.
-
class window_t { static LRESULT WINAPI window_proc( HWND window, UINT message, WPARAM wparam, LPARAM lparam ); }!?
Evtl.
SetWindowLongPtr( handle, GWLP_USERDATA, reinterpret_cast< LONG >( this ) )im Konstruktor undwindow_t *windowptr = reinterpret_cast< window_t* >( GetWindowLongPtr( window, GWLP_USERDATA ) );in der WNDPROC.// edit: Im Allgemeinen empfiehlt es sich aber Anwendungen zu schreiben, keine Frameworks.