簡介
本文所描述的 hotfix 會修正下列問題,Microsoft Visual Studio 2010 中。
問題 1
當您執行應用程式具有在原始程式碼中的迴圈時,您會遇到未預期的行為。如果全域最佳化以編譯的原始程式碼,就會發生這個問題 (/ Og) 啟用。
問題 2
請考慮下列情況:
-
您有 Visual C++ 的專案包含 Atlcomcli.h 檔案。
-
您指定了 /J 的編譯器選項,來定義_CHAR_UNSIGNED巨集專案中的。
-
您編譯專案。
在這個案例中,您會收到下列錯誤訊息之一︰
-
錯誤 C2338︰ 無法使用 /J 或 _CHAR_UNSIGNED 旗標已啟用編譯 CVarTypeInfo < char >
-
錯誤 C2338︰ 無法使用 /J 或 _CHAR_UNSIGNED 旗標已啟用編譯 CVarTypeInfo < char * >
問題 3
當您執行建置為 x86 為基礎 Windows 版本的 Visual C++ 的應用程式時,就會發生存取違規。當應用程式必須具有兩個陣列型別輸入引數的運算式樹狀結構時,就會發生這個問題。
原因
造成問題 1
因為不正確的迴圈最佳化會執行,就會發生這個問題。這會導致不正確的程式碼產生。
問題 2 的原因
因為不正確地設定為 [/J 選項和 CHAR_UNSIGNED 巨集 Atlcomcli.h 檔案中的靜態判斷提示,就會發生這個問題。
造成問題 3 的原因
之所以發生這個問題,是因為引數推入指示中的會混。因此,不正確的引數會傳遞至推入的指示。
更多的資訊
Hotfix 資訊
已經可以從 Microsoft 取得支援的 hotfix。不過,其旨在修正本文所述的問題。它只適用於發生此特定問題的系統上。此 hotfix 可能會接受其他測試。因此,如果此問題不會嚴重影響,我們建議您等候下一步的 Visual Studio 2010 包含此 hotfix。
若要立即解決這個問題,請連絡 Microsoft 客戶支援服務 」 取得 hotfix。如需 Microsoft 客戶支援服務電話號碼以及支援費用的相關資訊的完整清單,請造訪下列 Microsoft 網站︰http://support.microsoft.com/contactus/?ws=support注意 在特殊的情況下,如果 Microsoft 支援專業人員認為某特定更新程式可以解決您的問題時,可能就不會收取一般因支援電話所產生的費用。收取支援費用會套用,如果有其他支援問題是,不能限定的特定更新程式。
先決條件
您必須擁有 Microsoft 套用此 hotfix 之後安裝 Visual Studio 2010。
重新啟動需求
您不必重新啟動電腦,如果正在使用不受影響的檔案,套用此 hotfix 之後。
Hotfix 取代資訊
此 hotfix 不會取代任何其他 hotfix。
檔案資訊
此 hotfix 的英文版具有下列表格中所列檔案屬性 (或較新的檔案屬性)。這些檔案的日期和時間會以國際標準時間 (UTC) 格式列出。當您檢視檔案資訊時,會將它轉換為本地時間。若要查看 UTC 與當地時間的時差,請使用 時區 在索引標籤 日期和時間 在 [控制台] 中的項目。
檔案名稱 |
檔案版本 |
檔案大小 |
日期 |
時間 |
平台 |
---|---|---|---|---|---|
C2.dll |
16.0.30319.314 |
2,510,144 |
30-May-2010 |
20:48 |
x86 |
C2.dll |
16.0.30319.314 |
2,588,480 |
30-May-2010 |
20:48 |
x86 |
C2.dll |
16.0.30319.314 |
2,630,976 |
30-May-2010 |
20:48 |
x86 |
C2.dll |
16.0.30319.314 |
2,977,600 |
30-May-2010 |
20:48 |
x64 |
C2.dll |
16.0.30319.314 |
7,351,616 |
30-May-2010 |
20:48 |
IA-64 |
因應措施
因應措施的問題 1
若要解決這個問題,請停用全域最佳化。如需有關如何停用全域最佳化的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文︰
修正216181 ︰ 不正確的程式碼產生 /Og 的最佳化
因應措施的問題 2
若要解決這個問題,請使用下列 pragma 指示詞包含 Atlcomcli.h 檔。
#pragma push_macro("ATLSTATIC_ASSERT")
#undef ATLSTATIC_ASSERT #define ATLSTATIC_ASSERT(x,y) #include <atlcomcli.h> #undef ATLSTATIC_ASSERT #pragma pop_macro("ATLSTATIC_ASSERT")