Вопрос

Мне было интересно, возможно ли использовать точку входа программы win32 - WinMain - в качестве метода класса?Например;

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

Спасибо!

Это было полезно?

Решение

Нет. WinMain не может быть членом класса как «вход» точки программы. И в этом отношении, WinMain не может быть в любом пространстве имен (кроме глобального пространства имен). Например, даже user::WinMain как показано ниже не может быть «входом» точкой программы.

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

Точка входа программы должно быть Определено в глобальном пространстве имен.

Тем не менее, вы можете выполнить функцию с этим именем внутри класса (или в каком -либо другом пространстве имен), которое вы можете позвонить из действительный точка входа WinMain Определено в глобальном пространстве имен. НоcApp::WinMain (или же user::WinMain) никоим образом не является точкой «входа» программы.

Другие советы

Во-первых, это (и WndProc) должно было бы быть static участники должны соответствовать требуемым прототипам.Реальная проблема заключается в том, чтобы заставить компилятор привязываться к отсутствующей глобальной функции, для этого вам нужно использовать опцию компоновщика, такую как msvc /entry:<symbol> попробовать привязку к статическому члену класса, однако это может привести к ошибке в разрешении области видимости...Если у вас не может быть статических элементов, вы можете использовать запись CRT winmain для создания экземпляра вашего объекта, а затем вызвать его WinMain функция участника, ofc, в этом случае вы, возможно, не сможете напрямую привязаться к стандартным библиотекам, и вам нужно будет выполнить инициализацию CRT самостоятельно (хотя это можно получить из источника crt msvc)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top