Я пытаюсь переместить код из предварительного проекта в новый проект (оба сделаны в Visual Studio 2012).
Оригинал был сделан как консольное приложение и я хочу, чтобы новое было Приложение для Windows. Я создал пустой проект и переместил файлы / установил пути к библиотекам.
Это простая программа OpenGL с шейдерами.
Бывает, что даже когда я снова переключаюсь на создание консольного приложения с такими же свойствами .vcproj, У меня есть фатальная ошибка в Release и Debug.
Вы можете найти их ниже.
Почему происходит сбой моей программы? Все пути к библиотекам установлены очень хорошо, потому что это те же настройки, которые используются для предыдущий проект с теми же файлами, которые работали (в другом решении).
Освободить место аварии (за пределами #ifdef _DEBUG в dbghook.c
файл)
int _debugger_hook_dummy;
__declspec(noinline)
void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
{
/* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
(_Reserved);
_debugger_hook_dummy = 0;
}
Отладка места сбоя (fread.c) — появляется всплывающее окно с ошибкой
(Ошибка отладки):
_VALIDATE_RETURN((stream != NULL), EINVAL, 0);
После резки моего исходного файла по частям мне удалось отладить это. Проблема была не в порте (извините).
У меня были незначительные проблемы, связанные с расположением исполняемого файла: Visual Studio помещает их по умолчанию в SolutionDir / DebugorRelease, в то время как я искал их в ProjectDir / DebugorRelease.
Но главная проблема возникла из-за смены функции.
Есть боковой файл, который я использую для загрузки текстур, который довольно старый и использует Еореп открыть файлы.
Следуя полученным предупреждениям, я изменился все вхождения fopen в fopen_s, со всеми необходимыми модификациями. Это точная линия, где программа потерпела крах.
Я положил обратно версия fopen, проверил расположение файлов, и он вернулся к выполнению (не в Visual Studio, а только через командную строку, как в оригинальном проекте). Это для консольного приложения.
Чтобы сделать его приложением Windows, следующая строка выполняет свою работу, и на этот раз, хотя и только для командной строки, она работает по-настоящему.
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )