私はWindows上でアプリケーションを開発していますが、他のプラットフォームもサポートしたいと思います(私が書いたコードの大部分はプラットフォームに依存しません)。WinMainパラメータを別の関数に渡す
#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
}
だから、アイデアは、アプリケーションがある場合ということです:とにかく、私は私のmain.cpp
は少し次のようになります(おそらく、私は、このアプローチではナイーブだった)私は物事をシンプルに保つしたいの開発のために考え出しWindowsの下で起動するとWinMain
が呼び出され、残りの作業を行うために提供されたWinMain引数を使ってwi.initを呼び出します。
私はスマートされていたと思ったが、私はエラーを取得するコンパイルするとき:
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
私はこのエラーを調査してきましたし、人々が主な方法を忘れてしまったりしてみてくださいいずれかのときに起こるようですDLLを.exeとしてコンパイルします
私の質問のため、私はなぜこれが起こっているのか不思議で、このアプローチの代わりに私は何をお勧めしますか?
あなたのアプリはまだネイティブWindowsアプリではなく、コンソールモードのアプリとしてリンクされています。これは意図的ですか?そうであれば、main()を標準的な要求として使用します。そうでない場合は、Linker + System + SubSystemの設定を使用します。 Linker + Advanced + Entry Pointにも注意してください。 –