禁用通过_CRT_SECURE_NO_DEPRECATE生成的警告的最佳方法是什么,可以轻松恢复它们,并且可以跨Visual Studio版本使用?
如果我遇到旧的代码, if (!this) return; 在一个应用程序,这是多么严重的风险? 这是一个危险的定时炸弹,需要立即在应用程序范围内进行search和销毁,还是更像是一种可以安静地放置的代码味? 当然,我不打算编写这样的代码。 相反,我最近在我们的应用程序的许多部分使用的旧核心库中发现了一些东西。 想象一下CLookupThingy类有一个非虚拟的 CThingy *CLookupThingy::Lookup( name )成员函数。 很显然,在那些牛仔时代,其中一位程序员遇到了很多崩溃,从函数传递NULL CLookupThingy * s,而不是修复数百个调用站点,他悄悄地修复了Lookup(): CThingy *CLookupThingy::Lookup( name ) { if (!this) { return NULL; } // else do the lookup code… } // now the above can be used like CLookupThingy *GetLookup() { if (notReady()) return NULL; // else etc… } CThingy […]
#include和#import在C ++有什么区别?
C ++和Visual C ++有什么区别? 我知道C ++具有可移植性,所以如果你了解C ++,它与Visual C ++有什么关系? Visual C ++主要用于在线应用程序吗? Visual Basic会更适合桌面应用程序吗?
我想要一个从C ++窗口DLL中导出函数的简单示例。 我希望看到标题,cpp文件和def文件(如果绝对需要的话)。 我想要导出的名称是undecorated 。 我想使用最标准的调用约定(__stdcall?)。 我想使用__declspec(dllexport) ,而不必使用DEF文件。 例如: //header extern "C" { __declspec(dllexport) int __stdcall foo(long bar); } //cpp int __stdcall foo(long bar) { return 0; } 我试图避免链接添加下划线和/或数字(字节数?)的名称。 我没有支持dllimport和dllexport使用相同的头。 我不想要任何有关导出C ++类方法的信息,只需要c样式的全局函数。 UPDATE 不包括调用约定(和使用extern“C”)给我的出口名称,我喜欢,但这是什么意思? 无论默认调用约定我得到什么pinvoke(.NET),声明(VB6)和GetProcAddress会期望? (我猜GetProcAddress将取决于调用者创build的函数指针)。 我希望这个DLL可以在没有头文件的情况下使用,所以我并不需要很多花哨的#define来使头文件可以被调用者使用。 我很好,答案是我必须使用DEF文件。
Visual Studio有很多不同的加载项,请参阅Visual Studio Gallery 。 请分享您的经验和最爱。 作为动力,这里是我的一些最爱: 版本控制构build [F / O] – 自动构build编号非常方便的扩展 SlickEdit小工具 [F] – 有用的编辑器小工具,内置文件浏览器… SlickEdit工具 [C] – 编辑和版本工具 重构! for C ++ [F / C] – C ++代码重构,比如C# WiX [F / O] – 使用XML进行Windows安装程序设置 AnkhSVN [F / O] – 使用你的IDE里面的subversion 视觉泄漏检测器 [F / O] – 帮助debugging问题 Parasoft C ++testing [C] – 用于代码质量保证的套件 […]
我正在使用Microsoft Visual Studio 2011专业版testing版 我试图运行使用cMake和Visual Studio编译器编译的OpenCV C ++文件( http://opencv.willowgarage.com/wiki/Welcome )。 但是当我去debugging项目时,我得到了600多个错误,其中大部分是: 错误LNK2026:SAFESEH图像模块不安全。 显然这些文件在opencv_ffmpeg项目中,但是我找不到它们,我看了一下Microsoft帮助页上的safeseh Safe Exception Handlers页面,但是找不到任何明确的答案。 我想知道是否有其他人有这个问题,如果他们设法解决这个问题。
在Visual Studio 2008中使用C ++进行编程时,为什么在使用C#时没有像在重构菜单中看到的那样的function? 我不断地使用Rename ,当它不在时你真的很想念它。 我相信你可以得到这样的插件,但是为什么在使用C ++的时候没有把它集成到IDE中呢? 这是由于在C ++必须parsing的方式的一些问题?
这是我在Eclipse(alt-tab)中习惯的function。 在Visual C ++中是否有一个等价物?
假设我只是使用它们作为“正常”的GUI程序(没有COM,没有ActiveX,没有什么奇特的),我将在ATL和MFC之间看到的基本区别是什么,以帮助我找出使用哪一个? 我在网上做了一些search,但最终没有一个答案真的回答了我的问题: http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs.80).aspx : “ATL是一种既快速又简单的方法,既可以在C ++中创build一个COM组件,又可以占用很小的空间。如果不需要MFC自动提供的所有内置function,可以使用ATL创build一个控件。 没有真正回答我的问题,因为: 我没有使用COM。 这是否意味着MFC 不是很快? 为什么/怎么样? “MFC允许您创build完整的应用程序,ActiveX控件和活动文档,如果您已经使用MFC创build了控件,则可能需要继续在MFC中进行开发。创build新控件时,如果您不需要使用ATL所有MFC的内置function“。 也不回答我的问题,因为: 我甚至不知道什么是第一个ActiveX。 看起来好像微软不鼓励使用MFC,但我不明白为什么。 什么是 ATL不提供的MFC的“内置function”? 总的来说,这并不能回答我的问题,因为这并不能解释它们背后的缺点和原因。 因为直接或间接地,一切似乎都链接回上一页: 我如何决定是否将ATL,MFC,Win32或CLR用于新的C ++项目? “ATL&MFC在两者之间有点棘手。 [不要开玩笑!] 我会把你引到MSDN的页面来select它们之间的决定。 显然 ,这不能回答我的问题。 🙂 http://www.codeguru.com/forum/archive/index.php/t-64778.html 等等 我目前观察到的 (在过去几天里,同时试图学习): ATL基于模板或编译时多态。 ATL方法往往是非虚拟的,并倾向于返回引用。 MFC是基于虚拟方法,或者是运行时多态的。 MFC方法往往是虚拟的,并倾向于返回指针。 但是他们之间似乎没有任何架构上的区别 : 两者都使用消息映射( BEGIN_MSG_MAP与BEGIN_MESSAGE_MAP …大不了) 都将Win32方法包装到类中 两人似乎都有CWnd和CWindow类似 但是,如果除了编译时间和运行时间方面没有真正的差别,为什么它们都存在? 他们中的一个还不够吗? 我在这里错过了什么?