Я пытаюсь создать простое приложение для Windows, но на основе точки входа main (), так как мне нужно скомпилировать его на других платформах.
Я нашел конкретные директивы, чтобы сделать это с Visual Studio, но, похоже, он работает при компиляции библиотеки времени выполнения / MD, но вылетает при использовании /MT.
Вот полный код для воспроизведения сбоя, он каждый раз дает сбой.
==> Просто создайте пустой проект с файлом main.cpp и установите: Projet -> Свойства -> C / C ++ -> Генерация кода -> Библиотека времени выполнения -> / MT
#pragma comment(linker, "/SUBSYSTEM:WINDOWS")
#pragma comment(linker, "/ENTRY:main")
#pragma comment(linker, "/INCLUDE:mainCRTStartup")
int main(int argc, char** argv)
{
int* a = new int;
delete a;
return 0;
}
Это вызывает следующее исключение:
ntdll.dll!RtlpWaitOnCriticalSection() Inconnu
ntdll.dll!RtlpEnterCriticalSectionContended() Inconnu
ntdll.dll!RtlEnterCriticalSection() Inconnu
Application.exe!__acrt_lock(__acrt_lock_id _Lock) Ligne 55 C++
Application.exe!heap_alloc_dbg_internal(const unsigned __int64 size, const int block_use, const char * const file_name, const int line_number) Ligne 309 C++
Application.exe!heap_alloc_dbg(const unsigned __int64 size, const int block_use, const char * const file_name, const int line_number) Ligne 450 C++
Application.exe!_malloc_dbg(unsigned __int64 size, int block_use, const char * file_name, int line_number) Ligne 496 C++
Application.exe!malloc(unsigned __int64 size) Ligne 27 C++
[Code externe]
Application.exe!main(int argc, char * * argv) Ligne 9 C++
[Code externe]
Но если я использую точку входа WinMain, она не выйдет из строя:
#pragma comment(linker, "/SUBSYSTEM:WINDOWS")
int main(int argc, char** argv)
{
int* a = new int;
delete a;
return 0;
}
INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow)
{
return main(1, reinterpret_cast<char**>(&lpCmdLine));
}
Я хочу компилировать без внешней зависимости MSVCRT, поэтому я устанавливаю режим / MT.
У вас есть предложения? Я работаю над этой проблемой в течение многих дней ....