1

我在这个地方下载了一些关于密码过滤器的代码。原始项目是在vs2008和vs2010编译的。我更新到vs2012,发现无法编译。我该如何解决这个问题,谢谢。

这是错误消息: 错误信息

Error   1   error C2440: '=' : cannot convert from 'char *' to 'TCHAR *'    D:\SVN\branch\nobull-branch\util.cpp    72  1   passwdHk
Error   2   error C2664: 'int sprintf_s(char *,size_t,const char *,...)' : cannot convert parameter 1 from 'TCHAR *' to 'char *'    D:\SVN\branch\nobull-branch\util.cpp    89  1   passwdHk
Error   3   error C2664: '_strdup' : cannot convert parameter 1 from 'TCHAR *' to 'const char *'    D:\SVN\branch\nobull-branch\util.cpp    91  1   passwdHk
Error   4   error C2664: 'strlen' : cannot convert parameter 1 from 'TCHAR *' to 'const char *' D:\SVN\branch\nobull-branch\util.cpp    188 1   passwdHk
Error   5   error C2664: 'pshk_log_write_w' : cannot convert parameter 2 from 'const char [28]' to 'LPCWSTR'    D:\SVN\branch\nobull-branch\util.cpp    202 1   passwdHk
Error   6   error C2664: 'strlen' : cannot convert parameter 1 from 'TCHAR *' to 'const char *' D:\SVN\branch\nobull-branch\util.cpp    208 1   passwdHk
Error   7   error C2664: 'strlen' : cannot convert parameter 1 from 'TCHAR *' to 'const char *' D:\SVN\branch\nobull-branch\util.cpp    211 1   passwdHk
Error   8   error C2664: '_strdup' : cannot convert parameter 1 from 'TCHAR *' to 'const char *'    D:\SVN\branch\nobull-branch\util.cpp    224 1   passwdHk
Error   9   error C2664: 'strlen' : cannot convert parameter 1 from 'TCHAR *' to 'const char *' D:\SVN\branch\nobull-branch\util.cpp    229 1   passwdHk
Error   10  error C2446: ':' : no conversion from 'const char *' to 'TCHAR *'   D:\SVN\branch\nobull-branch\util.cpp    249 1   passwdHk
Error   11  error C2664: 'int _snprintf_s(char *,size_t,size_t,const char *,...)' : cannot convert parameter 1 from 'TCHAR *' to 'char *'   D:\SVN\branch\nobull-branch\util.cpp    249 1   passwdHk
Error   12  error C2664: 'int _snprintf_s(char *,size_t,size_t,const char *,...)' : cannot convert parameter 1 from 'TCHAR *' to 'char *'   D:\SVN\branch\nobull-branch\util.cpp    254 1   passwdHk
4

2 回答 2

3

您很可能不希望为当前的困境(呃...项目)进行 unicode 编译。

  1. 在项目资源管理器中右键单击您的项目,选择“属性...”
  2. 属性对话框的最顶部是一个配置选择下拉列表。您可能想要更改所有配置(除非出于某种奇怪的原因您想要构建非 Unicode 调试,而是 Unicode 版本)。如果您希望它们都是非 Unicode(并且您可能会这样做),请选择“所有配置”。
  3. 在配置属性下的左窗格中,选择“常规”
  4. 在右窗格中,在 Project Defaults 下,找到“Character Set”
  5. 如果当前设置为 Unicode 字符集,如果您不打算使用 MBCS 功能,请将其更改为“多字节字符集”或“未设置”。
  6. 保存您的项目文件,然后重建世界。

注意:您的 API 中的一些函数调用希望是通过宏定义选择的。我特别关心的是pshk_log_write_w(),选择它的名称是因为您正在编译为 Unicode(我希望)。运气好的话, pshk_log_write_a()当您进行上述更改时,该函数的相关窄版本将自动被选为预期目标。如果没有,可能在某些地方您需要进行一些从宽到窄的转换,但我只能希望不要。这样做很痛苦。

于 2013-01-14T05:24:00.537 回答
2

TCHAR 是 Microsoft 用于 8 位字符 (char) 或 16 位字符 (wchar_t) 的宏,用于帮助区分 Unicode 和 ASCII 字符串。他们在 SDK 中有两个不同的 API 集,这就是编译器是编译器的原因。似乎 Visual Studio 2012 默认为 wchar_t 而不是 char。您可以通过项目的选项禁用它:右键单击项目,然后单击属性。在一般部分下,应该有一个字符集选项。将其从使用 Unicode 字符集更改为使用多字节字符。阅读以下页面了解更多详情:http: //msdn.microsoft.com/en-us/library/c426s321%28v=vs.71%29.aspx希望对您有所帮助。

于 2013-01-14T04:35:06.367 回答