0

Windows でアプリケーションを開発していますが、他のプラットフォームもサポートしたいと考えています (私が書いたコードの大部分はプラットフォームに依存しません)。とにかく、私は開発のために物事をシンプルに保ちたいと考えました(おそらく私はこのアプローチで素朴でした)ので、私のmain.cpp見た目は次のように少し似ています:

#ifdef _WIN32
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR cmdLine,
                   int cmdShow)
#else
int main(int argc, char* argv[])
#endif
{
    /* If the application is launched under Windows */
#ifdef _WIN32
    win_init wi;
    return wi.init(hInstance, hPrevInstance, cmdLine, cmdShow);
#endif

    /* If the application is launched under OS X */
#ifdef __APPLE__
    osx_init oi;
    return oi.init();
#endif
}

したがって、アプリケーションが Windows で起動している場合は、WinMainが呼び出され、残りの処理を行うために提供された WinMain 引数を使用して wi.init を呼び出すという考え方です。

私は賢いと思っていましたが、コンパイルするとエラーが発生します。

MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

このエラーを調査したところ、メイン メソッドを忘れたり、DLL を .exe としてコンパイルしようとしたりすると発生するようです。

私の質問です。なぜこれが起こっているのか知りたいのですが、このアプローチの代わりに何をすることをお勧めしますか?

4

1 に答える 1

2

を使用するには、/SUBSYSTEM:WINDOWSリンカー オプションを使用しWinMainます。

于 2011-11-15T00:05:20.897 に答える