1

我想知道,是否可以使用 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);
};

谢谢!

4

2 回答 2

5

不可以WinMain 类的成员作为程序的“入口”点。就此而言,WinMain 不能任何命名空间中(除了全局命名空间)。例如,即使user::WinMain如下所示也不能成为程序的“入口”点。

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

程序的入口点必须在全局命名空间中定义。

但是,您可以在类(或其他命名空间)中使用此名称的函数,您可以从全局命名空间中定义的实际入口点调用该函数。WinMain但是cApp::WinMain(或user::WinMain)绝不是程序的“入口”点。

于 2011-04-30T11:47:57.933 回答
1

首先,它(和 WndProc)需要成为static匹配所需原型的成员。真正的问题是让编译器绑定到非全局函数,因为您需要使用链接器选项(例如 msvc)/entry:<symbol>尝试绑定到静态类成员,但是它可能会在范围解析上出错...如果您不能有静态成员,您可以使用 CRT winmain 条目创建对象的实例,然后调用其WinMain成员函数,然后您可能无法直接绑定到标准库,您需要执行CRT 自己初始化(虽然可以从 crt msvc 源中获取)

于 2011-04-30T11:52:24.480 回答