Domanda

Mi chiedevo, è possibile utilizzare il punto di ingresso di un programma win32 - WinMain - come metodo di classe? Ad esempio;

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);
};

Grazie!

È stato utile?

Soluzione

No.WinMain non può essere un membro della classe come punto di "ingresso" del programma.Inoltre, WinMain non può essere in nessuno spazio dei nomi (diverso dallo spazio dei nomi globale).Ad esempio, anche user::WinMain come mostrato di seguito non può essere il punto di "ingresso" del programma.

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

Il punto di ingresso del programma deve essere definito nello spazio dei nomi globale.

Tuttavia, puoi avere una funzione con questo nome all'interno di una classe (o in un altro spazio dei nomi), che puoi chiamare dal WinMain del punto di ingresso effettivo definito nello spazio dei nomi globale.ButcApp::WinMain (o user::WinMain) non è in alcun modo il punto di "ingresso" del programma.

Altri suggerimenti

In primo luogo (e il WndProc) dovrebbero essere membri static per abbinare i prototipi richiesti.Il vero problema è fare in modo che il compilatore si associ a una funzione non globale, per questo è necessario utilizzare un'opzione del linker come /entry:<symbol> di msvc per provare a eseguire il binding al membro della classe statica, tuttavia potrebbe verificarsi un bug sulla risoluzione dell'ambito ... Senon puoi avere membri statici, puoi usare la voce winmain CRT per creare quindi istanza del tuo oggetto e quindi chiamare il suo membro WinMain func, ofc potresti non essere in grado di collegarti direttamente alle librerie standard e dovrestiesegui tu stesso l'inizializzazione CRT (sebbene possa essere recuperato dal sorgente msvc crt)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top