Сначала вам нужно установить точку входа
Открыть диалоговое окно «Страницы свойств» проекта.Дополнительные сведения см. В разделе «Настройка свойств проекта Visual C ++».
Щелкните папку «Связыватель».
Откройте страницу свойств «Дополнительно».
Измените свойство точки входа.
и установите main_test
После, я не до конца понимаю почему, но необходимо сделать this
Открыть свойство проектаДиалоговое окно Страницы.Дополнительные сведения см. В разделе «Настройка свойств проекта Visual C ++».
Щелкните папку «Связыватель».
Откройте страницу свойств ввода.
Измените свойство «Ссылки на символьные параметры».
и установите _mainCRTStartup
для x86 или mainCRTStartup
для x64.
Или сделайте это программно в вашем коде:
#pragma comment(linker, "/ENTRY:main_test")
#if defined(_M_IX86)
# pragma comment(linker, "/INCLUDE:_mainCRTStartup")
#else
# pragma comment(linker, "/INCLUDE:mainCRTStartup")
#endif
#include <iostream>
int main() {
std::cout << "main" << std::endl;
return 0;
}
int main_test()
{
std::cout << "main_test" << std::endl;
return 0;
}
Вывод
main_test
Обратите внимание, что main
не является точкой входа по умолчанию .Точка входа для консольного приложения - _mainCRTStartup
, которая вызывает main
.Поэтому, изменяя точку входа, вы теряете CRT, и вам приходится вручную реализовывать такие вещи, как получение аргументов командной строки.Для более подробного ознакомления здесь
UPD
Я не думаю, что разработка вашей собственной ЭЛТ является хорошим решением, ее будет проще использоватьиз встроенных точек входа.
#pragma comment(linker, "/ENTRY:wmainCRTStartup ") // wmain will be called
//#pragma comment(linker, "/ENTRY:mainCRTStartup ") // main will be called
#include <iostream>
#include <stdlib.h>
int main(int argc, char** argv) {
for (int i = 0; i < argc; i++)
std::cout << argv[i] << std::endl;
return 0;
}
int wmain(int argc, wchar_t *argv[])
{
for (int i = 0; i < argc; i++)
std::wcout << argv[i] << std::endl;
return 0;
}