2011-11-05 44 views
-3

轉換舊VS2003項目VS2010,我已經無意中發現了一個錯誤:爲什麼我提出,「從VS2003轉換爲VS2010後,無法將參數2從'WORD [129]'轉換爲'LPOLESTR'」?

cannot convert parameter 2 from 'WORD [129]' to 'LPOLESTR' 

誰能給我提供一個提示,什麼可能導致這個問題?

+0

任何人都是什麼?有cookie嗎?我確實,但我不打算分享。 –

+0

這將有助於查看產生錯誤的代碼。 –

+3

發佈相關行和一些上下文可能會有助於診斷相當多......在此期間,-1​​。 –

回答

4

好了,你沒有發佈任何代碼,所以我會只是假設你有定義爲一個寬字符串,

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數組的結構的複雜框架;也許別人爲你寫了代碼,你甚至從來沒有看過它。

但是由於您沒有發佈任何代碼顯示我們如何聲明問題的字符串,所以我不能說。

+0

甚至在VS2005之前(至少在VS2003中),可以將'wchar_t'視爲內建類型(IIRC有'/ Zsomething'選項)。 –

+0

是的,它是一個編譯器選項,但是AFAIK或者被* default *關閉,或者被從早期版本的VS轉換而來的項目關閉。 – Shog9

+0

當然,這只是一些無償的硝煙。 :)我實際上給了你我的+1(我也在想這樣的事情,我的第一個想法是關於全大寫'WCHAR_T'的衝突聲明)。 –

相關問題