Передача параметров WinMain в другую функцию

Я занимаюсь разработкой приложения для 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 и затем я вызываю wi.init с предоставленными аргументами WinMain, чтобы сделать все остальное.

Я думал, что я умный, но при компиляции я получаю сообщение об ошибке:

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

Я исследовал эту ошибку, и кажется, что это происходит, когда люди забывают метод main или пытаются скомпилировать DLL как.exe

Итак, на мой вопрос; Мне интересно, почему это происходит, и что вы рекомендуете делать вместо этого подхода?

1 ответ

Решение

Вы хотите использовать /SUBSYSTEM:WINDOWS опция компоновщика для WinMain использоваться.

Другие вопросы по тегам