Question

Je me demandais, est-il possible d'utiliser le point d'entrée d'un programme win32 - le WinMain - comme méthode de classe? Par exemple;

class cApp {
public:
    cApp();
   ~cApp();

    cGuiManager* guiManager;
   cServerManager* serverManager;
    cAudioManager* audioManager;

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hInst, LPSTR lpCmdLine, int nCmdShow);
    static LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam);
};

Merci!

Était-ce utile?

La solution

Non

. WinMain ne peut pas un membre de la classe en tant que point du programme « d'entrée ». Et pour cette matière, WinMain ne peut pas de dans un espace de noms (autre que l'espace de noms global). Par exemple, même user::WinMain comme indiqué ci-dessous ne peut pas le point du programme "d'entrée".

namespace user
{
     int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int );
}

Point d'entrée du programme doit être défini dans l'espace de noms global.

Cependant, vous pouvez avoir une fonction de ce nom dans une classe (ou dans un autre espace de noms), que vous pouvez appeler à partir de l'entrée réelle point WinMain défini dans l'espace de noms global. ButcApp::WinMain (ou user::WinMain) est en aucun cas le point « d'entrée » du programme.

Autres conseils

Tout d'abord (et le WndProc) devraient être membres de static pour correspondre aux prototypes nécessaires. Le vrai problème est d'obtenir le compilateur de se lier à une fonction non globale, pour que vous devez utiliser une option de liaison tel que le /entry:<symbol> de msvc pour essayer se lient au membre de la classe statique, mais il pourrait bug sur la résolution de portée ... Si vous ne pouvez pas avoir des membres statiques, vous pouvez utiliser le CRT winmain entrée pour créer ensuite instance de votre objet, puis appeler son membre WinMain Func, alors vous ofc pourriez ne pas être en mesure de lier directement aux bibliothèques standard et vous aurez besoin de faire le CRT vous init (mais qui peut être saisi de la source crt msvc)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top