开发者

How do I build Notepad++ with Visual C++ 2010 Express?

Windows SDK is installed. I built N++ successfully with Visual C++ 2008 Express before.开发者_运维问答 But now with 2010 I have a lot of error messages about 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.


There's a property sheet included with the project named no_ms_shit.props (after conversion). There's a fair amount of hate expressed in that sheet for what MS has been trying to do for the past 5 years.

They went a little too over-board with turning everything off, they even disabled linking to sprintf_s(). Which is the source of your error, the stdio.h header omits the declaration but the string header uses it. Not sure if the Express edition supports editing project property sheets, but the step in the retail edition are:

  • View + Property Manager
  • Open one of the nodes and locate "no ms shit"
  • Right-click it, Properties
  • C/C++, Preprocessor, Preprocessor Definitions
  • Change __STDC_WANT_SECURELIB__=0 to 1
  • Add _CRT_SECURE_NO_WARNINGS to those definitions

The project compiles clean now. I do get a build error for copying files, it is a post-build event. Start another question if you can't figure out how to fix it.


Strange. I have Visual Studio 2010 Ultimate, and it even doesn't allow me to access the View->Property Pages menu item. It is disabled for me.

But I just went to the file no_ms_shit.props and edited that in Notepad++ only :). Then went to Project->Properties->Configuration Properties->General, and selected 'No' for treat warnings as Errors, and added _CRT_SECURE_NO_WARNINGS in the preprocessor definitions.

Don Ho should go with the flow than cursing the ms shit when he is developing in Windows and Visual Studio.


This worked for me when using Visual Studio 2012 Professional:

  • You have to edit no_ms_shit.vsprops (*.vsprops, not only *.props!):
    Replace __STDC_WANT_SECURE_LIB__=0 by __STDC_WANT_SECURE_LIB__=1

  • Add _CRT_SECURE_NO_WARNINGS to the preprocessor definitions.


A closer look at the source would show that most of the library calls that cause endless noise unless you use this property sheet come from the SciLexer.dll project. Scintilla is cross platform, so it doesn't need all the Windows specific cruft.As you mentioned, Microsoft went overboard with their replacing the standard string library, as legitimate as their attempt to avoid buffer overruns may be.

So you may direct this criticism to Neil Hodgson (main developer of Scintilla) rather than Don Ho.

CChris

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜