VS 中的 C++ 端口:新项目崩溃(相同的文件和设置)

Posted

技术标签:

【中文标题】VS 中的 C++ 端口:新项目崩溃(相同的文件和设置)【英文标题】:C++ Port in VS: new project crashes (same files & settings) 【发布时间】:2014-06-30 11:37:06 【问题描述】:

我正在尝试将代码从初步项目移动到新项目(均在 Visual Studio 2012 下制作)。

原来的应用程序是 控制台应用程序,我希望新的应用程序是 Windows 应用程序。我创建了一个空项目并移动了文件/设置了库路径。

这是一个带有着色器的简单 OpenGL 程序。

编辑:

即使我切换回创建控制台应用程序具有相同的 .vcproj 属性,我也会在发布和调试时遇到致命错误。 您可以在下面找到它们。

为什么我的程序会崩溃?所有库路径都设置得很好,因为它与具有相同文件的先前项目的设置相同(在不同的解决方案中)。

错误

释放崩溃位置(在dbghook.c 中的#ifdef _DEBUG 之外 文件)

 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);

【问题讨论】:

为什么不使用向导创建一个新的 Windows 应用程序并放入您的文件中呢?或者创建一个console应用和一个windows应用,比较一下vcproj有什么区别? 这听起来更像是一个库兼容性问题。确保您使用的 GLUT 版本与您的 VC++ 版本(编译器、链接器和运行时库)兼容。 我进行了比较(与 Araxis),以便 .vcproj 文件中的每个参数在 2 个控制台应用程序之间匹配。还是不能让新项目运行起来…… 【参考方案1】:

在将我的源文件分成几部分后,我设法调试了它。问题不在于端口(抱歉)。

我在处理可执行文件的位置时遇到了一些小问题:Visual Studio 默认将它们放在 SolutionDir/DebugorRelease 中,而我在 ProjectDir/DebugorRelease 中查找它们。

但主要问题来自功能的变化。 有一个我用来加载纹理的边文件,它很旧,使用 fopen 打开文件。

在收到警告后,我将所有出现的 fopen 更改为 fopen_s,并进行了所有必要的修改。这就是程序崩溃的确切位置。

我放回 fopen 版本,检查文件位置,然后它返回执行(不是在 Visual Studio 中,而是仅通过命令行,就像原始项目一样)。这是针对控制台应用程序的。

为了使它成为一个 Windows 应用程序,下面这行代码完成了这项工作,而这一次,虽然只是命令行,但它确实可以工作。

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

【讨论】:

以上是关于VS 中的 C++ 端口:新项目崩溃(相同的文件和设置)的主要内容,如果未能解决你的问题,请参考以下文章

MFC 和 /clr C++ 项目中的库

VS2017社区中的C++程序崩溃

比较VS中两个C++项目的区别

VS C++警惕项目中文件全局变量冲突!!!!!!!!

VS C++警惕项目中文件全局变量冲突!!!!!!!!

用vs2015写c++,编译报错项目已过期,怎么回事?