Problembeschreibung

Das folgende Szenario.

  • Sie erstellen eine Anwendung, die einen Byte aus einer Struktur oder einer Klasse in Microsoft Visual Studio 2008 Service Pack 1 (SP1) lädt.

  • Sie aktivieren die Optimierungsoption/Ox oder Optimierungsoption/O2 .

  • Kompilieren Sie die Anwendung mit einer Release-Konfiguration für die X64 Plattform.

In diesem Szenario stimmt der Offset, der Zugriff auf Strukturmember oder der Klassenmember generiert wird.

Dieses Problem tritt nur bei Größe der Struktur und den Offset oder die Klassengröße und den Offset eines der folgenden Paare gleich:

  • (14,13)

  • (15,13)

  • (22,21)

  • (23,21)

  • (30,29)

  • (31,29)

Problemlösung

Hotfix-Informationen

Ein unterstützter Hotfix ist inzwischen von Microsoft erhältlich. Es soll jedoch nur das Problem beheben, das in diesem Artikel beschrieben wird. Wenden Sie es nur auf Systeme an, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird möglicherweise noch getestet. Wenn Ihr System durch dieses Problem nicht schwerwiegend beeinträchtigt ist, empfehlen wir, auf das nächste Servicepack für Visual Studio 2008 warten, das diesen Hotfix enthält.

Wenn dieses Problem sofort beheben möchten, wenden Sie sich an Microsoft Support Services, um den Hotfix zu erhalten. Eine vollständige Liste der Telefonnummern des Microsoft Product Support Services und Informationen zu den Supportkosten finden Sie auf der folgenden Microsoft-Website:

http://support.microsoft.com/contactus/?ws=supportHinweis In bestimmten Fällen können Gebühren, die normalerweise für Support-Anrufe anfallen abgebrochen werden, wenn ein Microsoft-Supportmitarbeiter feststellt, dass ein bestimmtes Update Ihr Problem behebt. Die normalen Supportkosten gilt für zusätzliche Supportfragen und Probleme, die nicht für das betreffende Update qualifizieren.

Voraussetzungen

Sie müssen Visual Studio 2008 Service Pack 1 installiert, um diesen Hotfix anwenden.

Neustartanforderung

Sie müssen keinen Neustart des Computers nach der Installation dieses Hotfixes durchführen.

Informationen zu ersetzten Hotfixes

Dieser Hotfix ersetzt keine anderen Hotfixes.

Dateiinformationen

Die englische Version dieses Hotfixes weist Dateiattribute (oder spätere Attribute), die in der folgenden Tabelle aufgelistet sind. Die Datums- und Uhrzeitangaben für diese Dateien sind in Coordinated Universal Time (UTC) aufgelistet. Wenn Sie die Dateiinformationen anzeigen, werden sie in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu finden, verwenden Sie die Registerkarte Zeitzone unter Datum und Uhrzeit in der Systemsteuerung.

Dateiname

Dateiversion

Dateigröße

Datum

Zeit

Plattform

C2.dll

15.0.30729. 4082

2,283,320

19. März 2009

05:13

x86

C2.dll

15.0.30729.4082

2,36 1.656

19. März 2009

05:13

x86

C2.dll

15.0.30729.4082

3,01 7,528

19. März 2009

05:13

x64

Link.exe

9.0.30729.4082

1,0 54,520

19. März 2009

05:13

x64

Link.exe

9.0.30729.4082

799, 032

19-Mar-2009

05:13

x86

PROBLEMUMGEHUNG

Um dieses Problem zu umgehen, fügen Sie mindestens dummy "unsigned Char" Mitglieder erweitert die Größe der Struktur oder Klasse auf das kleinste Vielfache von acht Bytes hinzu. Erweitern Sie, z. B. 14 Byte auf 16 Bytes.

Status

Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.

Weitere Informationen

Um weitere Informationen zur Terminologie für Softwareupdates zu erhalten, klicken Sie auf die folgende Artikelnummer, um den Artikel der Microsoft Knowledge Base anzuzeigen:

824684 Erläuterung von der standardmäßigen Standardbegriffen bei Microsoft Softwareupdates

Schritte zum Reproduzieren des Problems

  1. Erstellen einer Anwendung, die mithilfe des folgenden Codes in Visual Studio 2008 SP1 Test.cpp heißt:

    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. Kompilieren Sie die Anwendung mit dem folgenden Befehl:

    CL test.cpp/O2/MD

Das Ergebnis ist 4. Das tatsächliche Ergebnis ist jedoch 0.

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Übersetzungsqualität?
Was hat Ihre Erfahrung beeinflusst?

Vielen Dank für Ihr Feedback!

×