1

我已經在此place下載了一些關於密碼過濾器的代碼。最初的項目是在vs2008和vs2010中編譯的。我更新到vs2012,我發現它不能被編譯。我該如何解決這個問題,謝謝。密碼過濾器無法在vs2012中編譯

這是錯誤消息: Error Messages

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 

回答

3

很可能你不想爲你當前的困境(erahh ...項目)編譯unicode。

  1. 右鍵點擊您的項目在項目資源管理器,選擇「屬性...」
  2. 在屬性對話框的最頂部是一個配置選擇下拉列表。您可能想要更改全部您的配置(除非出於某種奇怪的原因,您希望構建非Unicode調試,但Unicode發行版)。如果你希望它們都是非Unicode的(你可能會這樣做),選擇「All Configurations」。
  3. 在立即配置屬性下的左側窗格中,選擇「常規」
  4. 在右窗格中,在項目的默認設置,找到「字符集」
  5. 如果當前設置爲Unicode字符集,將其更改爲「多字節字符集「或」未設置「,如果您不打算使用MBCS功能。
  6. 保存你的項目文件,並重建世界。

注意:您的API中的一些函數調用有希望通過宏定義來選擇。特別是我關心的是pshk_log_write_w(),暗示它的名字是因爲你編譯爲Unicode(我希望)而被選中的。如果運氣好的話,會有一個相關的pshk_log_write_a()窄版本功能,當您進行上述更改時,該功能將自動作爲預期目標選取。如果不是的話,可能會有一些地方你需要做一些寬到窄的轉換,但我只能希望沒有。這樣做很痛苦。

+0

我將charater設置爲unicode字符集,它的工作原理,謝謝。 – king

+0

@@ LOL。將它改爲unicode是我沒有想到的。現在我想到了,如果它的目的是作爲unicode,並且你的新項目轉換沒有設置,那麼會發生同樣的問題。咄。那麼,至少你到了項目屬性編輯器的右邊部分來改變它。很高興我能夠至少幫你得到那麼多= P。 – WhozCraig

2

TCHAR是微軟的任何8個字符(字符)或16個字符(wchar_t的),以幫助Unicode和ASCII字符串區分宏。它們在SDK中有兩個不同的API集,所以這就是編譯器的原因。看來Visual Studio 2012默認爲wchar_t而不是char。您可以通過項目的選項禁用它:右鍵單擊該項目,然後單擊屬性。在常規部分下,應該有一個字符集選項。將其從使用Unicode字符集更改爲使用MultiByte字符。閱讀以下頁面瞭解更多詳情:http://msdn.microsoft.com/en-us/library/c426s321%28v=vs.71%29.aspx希望有所幫助。