如何使用Visual C++ 2010 Express构建Notepad++?

7

已安装Windows SDK。之前我使用Visual C++ 2008 Express成功地构建了N++。但是现在用2010版本时,我遇到了很多关于sprintf_s的错误信息:

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string(676): error C2039: 'sprintf_s' : is not a member of '`global namespace''
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string(676): error C3861: 'sprintf_s': identifier not found

Please help.

3个回答

20

这个项目中包含一个名为 no_ms_shit.props 的属性表 (转换后),其中对微软过去五年来一直试图做的事情表达了相当多的不满。

他们在关闭所有东西方面有些过火,甚至禁用了链接到 sprintf_s()。这就是你的错误来源,stdio.h 头文件省略了声明,但 string 头文件使用了它。不确定 Express 版本是否支持编辑项目属性表,但零售版的步骤如下:

  • 查看 + 属性管理器
  • 打开其中一个节点并找到 "no ms shit"
  • 右键单击它,选择“属性”
  • C/C++、预处理器、预处理器定义
  • __STDC_WANT_SECURELIB__=0 更改为 1
  • 将 _CRT_SECURE_NO_WARNINGS 添加到这些定义中

现在该项目可以编译成功。我确实会因为复制文件而得到一个构建错误,这是一个后期构建事件。如果你无法解决问题,请提出另一个问题。


谢谢!确实,Express版本没有属性管理器。但我已经找到了更改这些预处理器设置的位置(项目+属性+配置属性...)。现在可以构建了。 - thorn0

4
奇怪。我有Visual Studio 2010 Ultimate,但它甚至不允许我访问“查看->属性页面”菜单项。对我来说是禁用的。
但我只需打开Notepad ++中的no_ms_shit.props文件并进行编辑:)。然后转到Project->Properties->Configuration Properties->General,并选择“否”以将警告视为错误,并在预处理器定义中添加_CRT_SECURE_NO_WARNINGS。
当他在Windows和Visual Studio上开发时,Don Ho应该跟随潮流而不是诅咒ms shit。
这适用于我使用Visual Studio 2012 Professional时: - 您必须编辑no_ms_shit.vsprops(* .vsprops,不仅仅是* .props!): - 将__STDC_WANT_SECURE_LIB__ = 0替换为__STDC_WANT_SECURE_LIB__ = 1 - 将_CRT_SECURE_NO_WARNINGS添加到预处理器定义中。

这个答案帮助了我在VS2010中。 - Myanju

2
一个更仔细的查看源代码会显示,除非您使用此属性表,否则大多数导致无尽噪音的库调用来自SciLexer.dll项目。Scintilla是跨平台的,因此它不需要所有特定于Windows的垃圾。正如您所提到的,微软在替换标准字符串库方面过度了,尽管他们试图避免缓冲区溢出是合理的。
因此,您可以将这种批评直接针对Neil Hodgson(Scintilla的主要开发人员),而不是Don Ho。
CChris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接