我有一个C ++项目,它将在2008年编译得很好,而在2010年它将无法编译。
2010年,如果我将字符集更改为多字节,它将编译,但没有字符串正常工作可以准确地描述它发生了什么,如果我不改变它,下面的代码错误和警告显示。
2008年,它编译和工作正常,没有一个问题。
我在C ++中不是很聪明,所以如果可能的话,尽可能详细的易于理解的反应将帮助我理解正在发生的事情并可能解决它。
以下是错误,并在不是多字节时发出警告:
12 IntelliSense: argument of type "char *" is incompatible with parameter of type "LPCWSTR"
13 IntelliSense: argument of type "char *" is incompatible with parameter of type "LPCWSTR"
Error 10 error C2664: 'URLDownloadToFileW' : cannot convert parameter 2 from 'char [255]' to 'LPCWSTR'
Error 2 error C2664: 'strcmp' : cannot convert parameter 1 from 'WCHAR [256]' to 'const char *'
Error 3 error C2664: 'SetConsoleTitleW' : cannot convert parameter 1 from 'const char [11]' to 'LPCWSTR'
Error 4 error C2664: 'GetModuleHandleW' : cannot convert parameter 1 from 'const char [9]' to 'LPCWSTR'
Error 5 error C2664: 'GetModuleHandleW' : cannot convert parameter 1 from 'const char [9]' to 'LPCWSTR'
Error 11 error C2664: 'GetModuleHandleW' : cannot convert parameter 1 from 'const char [15]' to 'LPCWSTR'
Error 6 error C2664: 'CreateEventW' : cannot convert parameter 4 from 'const char [20]' to 'LPCWSTR'
Error 9 error C2664: 'CCmdHandler::AddMessageBytes' : cannot convert parameter 1 from 'TCHAR *' to 'char *'
Error 7 error C2440: 'initializing' : cannot convert from 'const char [16]' to 'LPTSTR'
Error 8 error C2440: 'initializing' : cannot convert from 'const char [16]' to 'LPTSTR'
Error 1 error C2440: '<function-style-cast>' : cannot convert from 'WCHAR [256]' to 'std::string'
C ++项目文件:
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="TheProject"
ProjectGUID="{96791392-AA33-4460-BFEA-D766216ECAA8}"
RootNamespace="TheProject"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;THEPROJECT_EXPORTS;LOGTOCONSOLE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="-D_SCL_SECURE_NO_WARNINGS"
Optimization="0"
InlineFunctionExpansion="1"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
AdditionalIncludeDirectories=""C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include""
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;THEPROJECT_EXPORT;LOGTOCONSOLE"
ExceptionHandling="2"
RuntimeLibrary="2"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="false"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
AdditionalLibraryDirectories="..\lib"
GenerateDebugInformation="false"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Quelldateien"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\CmdHandler.cpp"
>
</File>
<File
RelativePath=".\ConsoleCMD.cpp"
>
</File>
<File
RelativePath=".\dllmain.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
CompileAsManaged="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
CompileAsManaged="0"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\EntiyManager.cpp"
>
</File>
<File
RelativePath=".\ICommand.cpp"
>
</File>
<File
RelativePath=".\MiscManager.cpp"
>
</File>
<File
RelativePath=".\PipeProtocol.cpp"
>
</File>
<File
RelativePath=".\Pipes.cpp"
>
</File>
<File
RelativePath=".\stdafx.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Headerdateien"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\CmdHandler.h"
>
</File>
<File
RelativePath=".\CommandIDList.h"
>
</File>
<File
RelativePath=".\ConsoleCMD.h"
>
</File>
<File
RelativePath=".\detours.h"
>
</File>
<File
RelativePath=".\EntiyManager.h"
>
</File>
<File
RelativePath=".\hide.h"
>
</File>
<File
RelativePath=".\ICommand.h"
>
</File>
<File
RelativePath=".\IOnFrameClient.h"
>
</File>
<File
RelativePath=".\Log.h"
>
</File>
<File
RelativePath=".\MiscManager.h"
>
</File>
<File
RelativePath=".\PipeProtocol.h"
>
</File>
<File
RelativePath=".\Pipes.h"
>
</File>
<File
RelativePath=".\stdafx.h"
>
</File>
<File
RelativePath=".\targetver.h"
>
</File>
</Filter>
<Filter
Name="Ressourcendateien"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
答案 0 :(得分:4)
您的代码似乎不适合使用UNICODE字符串。因此,您应检查项目设置,并在“常规”部分中验证您使用的“字符集”。我想你有“使用Unicode字符集”,但你需要将其更改为“未设置”。 “使用多字节字符集”不一样。