狀況
請考慮下列案例。
-
您建立應用程式所載入的位元組,從結構,或從 Microsoft Visual Studio 2008 Service Pack 1 (SP1) 中的類別。
-
您開啟了/Ox最佳化或/O2最佳化選項。
-
將應用程式編譯使用發行組態的 x64 平台。
在這個案例中,就會產生存取結構成員或類別成員的位移不正確的。
只有當結構大小、 位移或類別大小、 位移等於下列成對的其中一個時,發生此問題︰
-
(14,13)
-
(15,13)
-
(22,21)
-
(23,21)
-
(30,29)
-
(31,29)
解決方案
Hotfix 資訊
已經可以從 Microsoft 取得支援的 hotfix。不過,其旨在修正本文所述的問題。它只適用於發生此特定問題的系統上。此 hotfix 可能會接受其他測試。因此,如果此問題不會嚴重影響,我們建議您等候下一步的 Visual Studio 2008 service pack 包含此 hotfix。
若要立即解決這個問題,請連絡 Microsoft 客戶支援服務 」 取得 hotfix。如需 Microsoft 客戶支援服務電話號碼以及支援費用的相關資訊的完整清單,請造訪下列 Microsoft 網站︰
http://support.microsoft.com/contactus/?ws=support注意 在特殊的情況下,如果 Microsoft 支援專業人員認為某特定更新程式可以解決您的問題時,可能就不會收取一般因支援電話所產生的費用。收取支援費用會套用,如果有其他支援問題是,不能限定的特定更新程式。
先決條件
您必須有 Visual Studio 2008 Service Pack 1 安裝套用此 hotfix 之後。
重新啟動需求
您不必套用此 hotfix 之後,重新啟動電腦。
Hotfix 取代資訊
此 hotfix 不會取代任何其他 hotfix。
檔案資訊
此 hotfix 的英文版具有下列表格中所列檔案屬性 (或較新的檔案屬性)。這些檔案的日期和時間會以國際標準時間 (UTC) 格式列出。當您檢視檔案資訊時,會將它轉換為本地時間。若要查看 UTC 與當地時間的時差,請在 [控制台] 中的日期和時間項目使用 [時區] 索引標籤。
檔案名稱 |
檔案版本 |
檔案大小 |
日期 |
時間 |
平台 |
---|---|---|---|---|---|
C2.dll |
15.0.30729。 4082 |
2,283,320 |
2009 年 3 月 19 日 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
2,36 1,656 |
2009 年 3 月 19 日 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
3,01 7,528 |
2009 年 3 月 19 日 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
1,0 54,520 |
2009 年 3 月 19 日 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
799、 032 |
19-Mar-2009 |
05:13 |
x86 |
因應措施
要解決這個問題,請加入一個或多個空的"不帶正負號的字元"成員來擴充大小到最小的八個位元組的類別或結構。例如,延伸至 16 個位元組的 14 位。
狀態
Microsoft 已確認這是<套用>一節所列出的 Microsoft 產品的問題。
更多的資訊
如需有關軟體更新術語的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
用來描述 Microsoft 軟體更新標準術語的編號 824684描述
如果要重現問題的步驟
-
建立使用下列程式碼,在 Visual Studio 2008 SP1 中名為 Test.cpp 的應用程式︰
typedef struct DskDecimal
{
unsigned char precision;
unsigned char scaleFactor;
unsigned short value[ 5];
unsigned char maxPrecision;
unsigned char maxScaleFactor;
} DskDecimal;
int main()
{
DskDecimal decimal;
decimal.maxScaleFactor = 4;
DskDecimal self = decimal;
return self.maxScaleFactor;
} -
編譯應用程式,使用下列命令︰
cl test.cpp /O2 /MD
預期的結果為 4。不過,實際的結果為 0。