我想知道,是否可以使用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);
};
谢谢!
答案 0 :(得分:4)
没有。 WinMain
不能成为该计划的“入口”点的成员。就此而言,WinMain
不能在任何名称空间中 (除了全局名称空间)。例如,即使user::WinMain
如下所示也不能成为该计划的“入口”点。
namespace user
{
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int );
}
程序的入口点必须在全局命名空间中定义。
但是,您可以在类(或其他名称空间)中使用此名称的函数,您可以从全局名称空间中定义的实际入口点WinMain
调用该函数。 。但cApp::WinMain
(或user::WinMain
)绝不是该计划的“入口”。
答案 1 :(得分:1)
首先,它(和WndProc)需要成为static
成员才能匹配所需的原型。真正的问题是让编译器绑定到一个无全局函数,因为你需要使用一个链接器选项,如msvc的/entry:<symbol>
来尝试绑定到静态类成员,但它可能会在范围解析上出错...如果您不能拥有静态成员,可以使用CRT winmain条目创建对象的实例,然后调用其WinMain
成员函数,然后您可能无法直接绑定到标准库,你需要自己做CRT init(尽管可以从crt msvc源获取)