2011-11-15 12 views
0

私は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としてコンパイルします

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

+1

あなたのアプリはまだネイティブWindowsアプリではなく、コンソールモードのアプリとしてリンクされています。これは意図的ですか?そうであれば、main()を標準的な要求として使用します。そうでない場合は、Linker + System + SubSystemの設定を使用します。 Linker + Advanced + Entry Pointにも注意してください。 –

答えて

2

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

+0

ありがとうございました! – krslynx

関連する問題