修正︰ 產生的存取結構成員或類別成員的位移不正確時使用 [Visual Studio 2008 SP1 中的 [了 /Ox 或 /O2 選項編譯應用程式

狀況

請考慮下列案例。

  • 您建立應用程式所載入的位元組,從結構,或從 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描述

如果要重現問題的步驟

  1. 建立使用下列程式碼,在 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;
    }
  2. 編譯應用程式,使用下列命令︰

    cl test.cpp /O2 /MD

預期的結果為 4。不過,實際的結果為 0。

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

Thank you for your feedback!

Thank you for your feedback! It sounds like it might be helpful to connect you to one of our Office support agents.

×