轉換舊VS2003項目VS2010,我已經無意中發現了一個錯誤:爲什麼我提出,「從VS2003轉換爲VS2010後,無法將參數2從'WORD [129]'轉換爲'LPOLESTR'」?
cannot convert parameter 2 from 'WORD [129]' to 'LPOLESTR'
誰能給我提供一個提示,什麼可能導致這個問題?
轉換舊VS2003項目VS2010,我已經無意中發現了一個錯誤:爲什麼我提出,「從VS2003轉換爲VS2010後,無法將參數2從'WORD [129]'轉換爲'LPOLESTR'」?
cannot convert parameter 2 from 'WORD [129]' to 'LPOLESTR'
誰能給我提供一個提示,什麼可能導致這個問題?
好了,你沒有發佈任何代碼,所以我會只是假設你有定義爲一個寬字符串,
WORD wszMyAwesomeStringThatsGonnaBePassedToAnAPIatSomePoint[129] = "Booga!";
看到,VS2005,MS gets with the program,使wchar_t的內置類型。在此之前,它只是一個typedef ... unsigned short
。這是罰款爲您的目的,因爲無論是WORD *和LPOLESTR 也只unsigned short*
別名。
但現在,wchar_t是一個內置類型,並且LPOLESTR被定義 - 假設您沒有編譯OLE2ANSI定義 - 作爲__RPC_string wchar_t*
...因此,您的代碼中斷。
如果您已經憤怒地打字,「U說謊!我不使用WORD
ANYWHERE !!!」,停止 - 你很可能被使用不同的typedef甚至是的#define最終導致您的變量被定義爲WORD
的數組。也許你正在使用一些將XML預編譯爲包含WORD數組的結構的複雜框架;也許別人爲你寫了代碼,你甚至從來沒有看過它。
但是由於您沒有發佈任何代碼顯示我們如何聲明問題的字符串,所以我不能說。
甚至在VS2005之前(至少在VS2003中),可以將'wchar_t'視爲內建類型(IIRC有'/ Zsomething'選項)。 –
是的,它是一個編譯器選項,但是AFAIK或者被* default *關閉,或者被從早期版本的VS轉換而來的項目關閉。 – Shog9
當然,這只是一些無償的硝煙。 :)我實際上給了你我的+1(我也在想這樣的事情,我的第一個想法是關於全大寫'WCHAR_T'的衝突聲明)。 –
任何人都是什麼?有cookie嗎?我確實,但我不打算分享。 –
這將有助於查看產生錯誤的代碼。 –
發佈相關行和一些上下文可能會有助於診斷相當多......在此期間,-1。 –