質問

私は疑問に思っていました、Win32プログラムのエントリポイント - ウィンメイン - をクラスの方法として使用することは可能ですか?例えば;

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 必要なプロトタイプに一致するメンバー。本当の問題は、コンパイラをNOグローバル関数にバインドさせることです。なぜなら、MSVCのようなリンカーオプションを使用する必要があるからです /entry:<symbol> 静的クラスのメンバーにバインドしてみるには、スコープ解像度でバグアウトする可能性があります...静的メンバーを持たない場合は、CRT Winmainエントリを使用してオブジェクトのインスタンスを作成してから呼び出すことができます。 WinMain メンバーFUNC、OFCあなたは標準ライブラリに直接バインドできない可能性があり、自分でCRT Initを実行する必要があります(ただし、CRT MSVCソースからつかむことができます)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top