Symptomen
Neem het volgende scenario.
-
U maakt een toepassing die wordt geladen een byte van een structuur of van een klasse in Microsoft Visual Studio 2008 Service Pack 1 (SP1).
-
Schakelt u de optie/OX optimalisatie of /O2 optimalisatie.
-
U de toepassing compileren met behulp van een release-configuratie voor het x64 platform.
In dit scenario wordt klopt de verschuiving die wordt gegenereerd voor toegang tot het lid van de structuur of het klassenlid niet.
Dit probleem doet zich alleen wanneer de structuurgrootte en de offset of de grootte van de klasse en de verschuiving gelijk is aan een van de volgende paren:-
(14,13)
-
(15,13)
-
(22,21)
-
(23,21)
-
(30,29)
-
(31,29)
Oplossing
Informatie over de hotfix
Een ondersteunde hotfix is nu beschikbaar bij Microsoft. Het is echter bedoeld om alleen het probleem dat wordt beschreven in dit artikel. Pas deze alleen toe op systemen waarop dit specifieke probleem zich voordoet. Deze hotfix moet wellicht extra worden getest. Als u geen ernstige problemen ondervindt, is het daarom raadzaam te wachten op de volgende versie van Visual Studio 2008 servicepack waarin deze hotfix is opgenomen.
U lost dit probleem meteen contact op met Microsoft Customer Support Services om de hotfix te verkrijgen. Voor een volledige lijst met telefoonnummers van Microsoft Customer Support Services en informatie over kosten van ondersteuning vindt u op de volgende Microsoft-website:http://support.microsoft.com/contactus/?ws=supportOpmerking In speciale gevallen kunnen kosten die normaal aan ondersteuningsoproepen verbonden zijn, worden geannuleerd als een medewerker van Microsoft productondersteuning van mening is dat een specifieke update de oplossing van uw probleem is. De normale ondersteuningskosten blijven gelden voor extra ondersteuningsvragen die niet in aanmerking voor de specifieke update in kwestie komen.
Vereisten
U kunt Visual Studio 2008 Service Pack 1 geïnstalleerd om deze hotfix moet hebben.
Opnieuw opstarten
U hoeft de computer niet opnieuw op te starten nadat u deze hotfix hebt toegepast.
Informatie over het vervangen van hotfixes
Deze hotfix vervangt geen andere hotfixes.
Bestandsinformatie
De Engelse versie van deze hotfix heeft de bestandskenmerken (of recentere bestandskenmerken) die in de volgende tabel worden weergegeven. De datums en tijden voor deze bestanden worden weergegeven in Coordinated Universal Time (UTC). Wanneer u de bestandsinformatie weergeeft, wordt deze naar lokale tijd geconverteerd. Om het verschil tussen UTC en lokale tijd op te zoeken, gebruikt u het tabblad tijdzone in het onderdeel datum en tijd in het Configuratiescherm.
Bestandsnaam |
Bestandsversie |
Bestandsgrootte |
Datum |
Tijd |
Platform |
---|---|---|---|---|---|
C2.dll |
15.0.30729. 4082 |
2,283,320 |
19 mrt 2009 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
2,36 1,656 |
19 mrt 2009 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
3,01 7,528 |
19 mrt 2009 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
1,0 54,520 |
19 mrt 2009 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
799, 032 |
19-Mar-2009 |
05:13 |
x86 |
Tijdelijke oplossing
Om dit probleem te omzeilen, Voeg een of meer leden dummy "unsigned char" om uit te breiden van de grootte van de structuur of van de klasse op het kleinste veelvoud van acht bytes. Uitbreiden, bijvoorbeeld 14 bytes tot 16 bytes.
Status
Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.
Meer informatie
Voor meer informatie over terminologie voor software-updates klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:
824684 beschrijving van de standaardterminologie die wordt gebruikt om software-updates voor Microsoft te beschrijven
Stappen om het probleem te reproduceren
-
Een toepassing maken die met de naam Test.cpp met de volgende code in Visual Studio 2008 SP1:
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; } -
Compileer de toepassing met de volgende opdracht:
cl test.cpp/MD /O2
Het verwachte resultaat is 4. Het feitelijke resultaat is 0.