Articles of 视觉工作室2010年

如何避免在Windows上释放模式下的“program.exe已停止工作”窗口?

我正在Visual Studio 2010上开发C ++中的软件。由于这个软件应该在没有人工交互的服务器上运行,所以我确实需要摆脱这个“program.exe已经停止工作”窗口在发布错误的情况下popup。 我只是想要程序终止(也许也给出了一个错误信息,但不一定),并没有阻止等待某人点击“closures程序”button。 我不得不提,我的机器上有64位Windows 7专业版。 我已经阅读了几件事情,比如: _set_abort_behaviorfunction。 这解决了调用abort()时的情况,但对于“vector下标超出范围”等错误则不是这种情况。 我知道我可以通过做exception处理来解决这些错误,但并不是所有的错误都是exception,因此这并不能解决我的整个问题。 我也读了一些关于Dr.Watsondebugging器的内容,这个debugging器应该是静静地终止应用程序,但是我觉得这个debugging器不适用于Windows 7.另外我不知道这个debugging器是否可以解决我的问题在发布模式… 我没有发现,禁用我的整个机器上的错误报告是一个优雅的select,虽然我读了这也可以是一个替代品(不是我想要的)。 我怎样才能在Visual Studio中做到这一点? 有什么设置我可以使用? 有没有办法在Visual Studio中打开exception中的所有错误,以便我可以用exception处理机制解决问题? (如果这是一个愚蠢的问题,请容忍) 我期待着你的build议。 非常感谢您的时间! 最好的问候,科妮莉亚

端口Visual Studio C ++到Linux

我们有一个不是很复杂,但很大 (即大量的文件)Visual Studio C ++ Win32控制台编写在VS2010中的C ++ 0x标准。 它不使用任何非标准的代码或任何东西(希望!)。 我现在想把它移植到Linux上。 哪种方法是最快的方法呢? autoconf的? 老式的make文件? 任何其他解决scheme

在Visual Studio中刷新自动完成(IntelliSense)数据库

我注意到, Visual Studio中的自动完成function不能正常工作,一旦我的项目达到一定的大小(在我的情况下~4,100行代码)。 我还注意到,一旦第三方库的数量增加(名称空间和类属性和方法不再可见),性能也会降低。 有没有办法手动更新自动完成数据库或为现有的项目创build一个新的? 我目前在Visual Studio 2008下工作,但是我也在Visual Studio 2010中遇到过这个问题。

如何强制C ++从磁盘分配内存?

我有成千上万的C ++代码行在小文本文件上运行良好,但在大文本文件(如2 GB大小)上崩溃。 崩溃的原因:应用程序吃内存。 是否可以从磁盘分配内存? 因为在大多数情况下,硬盘空间比物理内存大得多。 如果我可以从我的应用程序的硬盘借用一些空间,并在使用后返回,那么我的应用程序很less有机会崩溃。 这是我的devise思路: 创build文件映射的临时文件(CreateFileMapping,OpenFileMapping) 强制我的应用程序从临时文件分配内存 做一些清理工作:CloseFileMapping并删除临时文件 因为我有很多现有的代码,如果我的devise思想是合理的,我不想重新devise我的项目。 我不确定devise思想是否可以实现。 任何人都可以帮助我? PS:我正在使用Visual C ++ 2010。

如何使用__stdcall来限定C ++ lambda?

前言 – 我喜欢C ++的lambda,如果可能的话我会在任何地方使用它。 现在我有一个lambda要求,我需要一个__stdcall lambda。 但是我收到以下错误消息: error C2664: 'EnumWindows' : cannot convert parameter 1 from '`anonymous-namespace'::<lambda1>' to 'WNDENUMPROC' 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 任何人都可以帮助我? 这里是我的代码( EnumWindowsProc是在函数范围内 ): auto EnumWindowsProc = [&](HWND hwnd, LPARAM lParam) mutable -> bool { return true; }; EnumWindows(EnumWindowsProc, NULL);

以微秒精度获得时间点

我需要以微秒的精度检索当前时间点 。 时间点可以相对于任何固定的date。 如何实现? 对于就业政策,我真的不应该使用boost或任何其他库。 我在一个多平台的应用程序和Linux下,我可以使用C ++ 11 system_clock::now().time_since_epoch() ,但在Windows下我使用VS2010,所以我没有std::chrono库。 我已经看到了RtlTimeToSecondsSince1970函数,但它的分辨率是第二个。

对于Windows 7上的64位安装,Python PIP有MS Visual Studio 2010 Express的path问题

我正在创build一个干净安装的Python 3.3,64位版本的virtualenv。 (注:我在我的电脑上安装了几个包括WinPython的python安装程序,但是想要为我正在处理的几个项目设置干净和小的virtualenvs。WinPython版本工作得很好。)当我使用pip尝试安装软件包时,我收到了一个错误信息(如果需要,可以包含pip日志)。 最终,错误信息的最后一行是: File "c:\python33-b\Lib\distutils\msvc9compiler.py", line 287, in query_vcvarsall raise ValueError(str(list(result.keys()))) ValueError: ['path'] 我调查了msvc9compiler.py中函数query_vcvarsall的结果。 我发现这个函数在我的电脑上查找MS Visual Studio 10 Express的vcvarsallpath。 它正在寻找4个组件:INCLUDE =,PATH =,LIB =和LIBPATH =。 这些是特定于MS VS 2010.我的安装发送了一个“amd64”参数到这个函数。 它找不到PATH =语句,但find了vcvarsall.bat文件。 当我欺骗这个函数来使用“x86”参数时,它发现了所有这4个语句,看起来好像运行的很好。 我花了一些时间在网上研究这个。 我发现MS VS Express 2010默认安装为32位。 一个必须设置它运行为64位(这意味着它将设置上面所需的语句。)显然有一个错误,并没有安装这个版本的64位工具。 所以我安装了MS SDK以安装64位工具。 然后我发现有一个修复,并安装(在下面列出的链接)。 有几种方法可以为64位VS创buildpath。 一个是在MS VS的命令行上运行vcvarsall amd64 。 这导致了一个消息说工具没有安装在我的电脑上。 这些工具位于C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64目录中。 它显然正在寻找的文件是vcvars64.bat(或类似的东西)。 我有目录但不是batch file。 […]

语法错误:缺less';' 在编译winnt.h时标识符“PVOID64”之前

我最近得到了一个应用程序的源代码。 当我尝试构build解决scheme时,在包含winnt.h所有部分中出现错误。 错误代码有点不同,但是它们总是指向winnt.h中的这些行: typedef void *PVOID; typedef void * POINTER_64 PVOID64; 和 struct { DWORD crc; BYTE rgbReserved[14]; } CRC; 那么,这可能是什么原因呢? winnt.h是一个标准的头文件,并没有被修改。 这与我使用VS 2010或使用64位窗口有什么关系? 还是需要某种configuration? 编辑:这是确切的错误代码: 1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C2146: syntax error : missing ';' before identifier 'PVOID64' 1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C4430: missing type specifier – int assumed. Note: C++ does […]

在Windows中build立Luabind

我在使用VS 2010在Lua和Luabind下运行Windows 7时遇到了问题。到目前为止,我已经从http://luabinaries.sourceforge.net和Luabind从http://www.hci.iastate.edu/下载了LuaBinaries 。 〜rpavlik / doxygen / luabind / docs.html 。 我已经在Luabind的INSTALL文件中提到的命令行中设置了我的环境variablesBOOST_ROOT和LUA_PATH,并且我不能通过这个错误: C:\lua\luabind>bjam stage error: at Jamroot:41 error: *** Unable to determine Lua include directory. 如果有人能够在Windows下build立Luabind任何提示是非常感谢! 更重要的是,如果任何人能够与Lua&Luabindbuild立一个VS 2010 C ++项目并愿意分享,我将不仅仅是感谢!

使用Visual Studiodebugging器与不使用debugging器运行可执行文件之间的区别

我试图debugging一个问题,其中一个可执行文件生成可重复的输出(我想要),直接从Visual Studio执行,但不会产生可重复的输出时,从命令提示符执行。 这是一个单线程的应用程序,所以在时间方面不应该有任何奇怪的行为。 有人可以列举两种环境之间可能的差异吗? 我确定实际的可执行文件是相同的 – 它们都是发布版本,并且运行相同的.exe文件。 这里是环境和结果: 直接从命令提示符运行(cmd):不可重复输出 从Visual Studio运行debugging(F5):可重复的输出 从Visual Studio运行而不进行debugging(Ctrl-F5):不可重复输出 我知道工作目录可能是不同的,但我手动调整,以确保工作目录是相同的。 基于这些结果,它看起来像运行“debugging”(即使在发布版本)以某种方式解决了这个问题。 这是否指向可能的罪魁祸首? 运行可执行文件与debugging和不运行之间有什么区别? 解决scheme:正如在接受的答案中指出的,debugging堆是问题。 问题在于我们的代码深处,有人在初始化之前正在访问大型数组的一部分。 他们已经用malloc分配了内存,并没有将内存初始化为0.debugging堆会(我认为)用一些可重复的值填充数组,而当debugging器没有连接(即从命令行运行或与Ctrl-F5)的值更随机,有时会造成程序行为的微小偏差。 不幸的是,调整是如此微妙以至于几乎不可察觉,并且在处理的第一个“框架”之后,有问题的记忆被适当地重新设置,但是初始条件已经略微不同,损坏已经完成。 混沌理论在行动! 感谢您的指导。 一个很好的debugging技巧帮助:写一个自定义的malloc,立即用完全随机的数据填充内存。 这样,在使用之前,您可以确保自己正确地初始化它,否则每次运行结果都会(希望)变得疯狂,即使在debugging模式下也是如此。