Pazīmes
Apsveriet šādu situāciju.
-
Jūs izveidojat lietojumprogrammu, kas ielādē baits no struktūra vai Microsoft Visual Studio 2008 1. servisa pakotne (SP1) klases.
-
Ir ieslēgta opcija /Ox optimizācija vai /O2 optimizācija.
-
Jums apkopot lietojumprogrammu, izmantojot laidiena konfigurācijas x64 platformas.
Šādā gadījumā piekļūt struktūra vai klases locekļa ģenerēto nobīde nav pareiza.
Šī problēma rodas tikai, kad struktūra lielumu un nobīde vai klases lielums un nobīde vienāds kādu no šīm pāri:
-
(14,13)
-
(15,13)
-
(22,21)
-
(23,21)
-
(30,29)
-
(31,29)
Risinājums
Informācija par labojumfailu
Pašlaik korporācija Microsoft piedāvā atbalstītu labojumfailu. Tomēr tas ir paredzēts tikai šajā rakstā aprakstītās problēmas novēršanai. Izmantojiet to tikai tām sistēmām, kurām ir radusies tieši šī problēma. Iespējams, tiks veikta šī labojumfaila papildu testēšana. Tādēļ, ja jums ir šī problēma nerada nopietnus traucējumus, ieteicams pagaidīt Visual Studio 2008 nākamā servisa pakotne, kurā ir iekļauts šis labojumfails.
Lai nekavējoties novērstu šo problēmu, sazinieties ar Microsoft klientu atbalsta pakalpojumu sniedzēju, lai iegūtu labojumfailu. Pilnīgu sarakstu ar Microsoft klientu atbalsta pakalpojumu sniedzēju tālruņu numuriem un informāciju par atbalsta izmaksām, apmeklējiet šo Microsoft Web vietu:
http://support.microsoft.com/contactus/?ws=supportPiezīme. Īpašos gadījumos standarta izmaksas par atbalsta zvaniem nav jāsedz, ja Microsoft atbalsta speciālists nosaka, ka šo problēmu novērsīs noteikts atjauninājums. Parasti atbalsta izmaksas tiek piemērotas jautājumiem par papildu atbalstu un problēmām, kas neskar specifisko atjauninājumu apspriešanu.
Priekšnosacījumi
Jums ir jābūt Visual Studio 2008 1. servisa pakotni, lai lietotu šo labojumfailu.
Restartēšanas nepieciešamība
Nav pēc šī labojumfaila lietošanas jārestartē dators.
Informācija par labojumfaila aizstāšanu
Šis labojumfails neaizstāj nevienu citu labojumfailu.
Informācija par failu
Šī labojumfaila versijai angļu valodā ir faila atribūti (vai jaunāki faila atribūti) Šajā tabulā sniegtie. Šo failu datumi un laiki ir norādīti atbilstoši universālajam koordinētajam laikam (UTC). Skatot faila informāciju, tā tiek pārvērsta atbilstoši vietējam laikam. Lai noskaidrotu atšķirību starp UTC un vietējo laiku, izmantojiet vadības paneļa vienuma Datums un laiks cilni Laika josla.
Faila nosaukums |
Faila versija |
Faila lielums |
Datums |
Laiks |
Platformas |
---|---|---|---|---|---|
C2.dll |
15.0.30729. 4082 |
2,283,320 |
19-Mar-2009 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
2,36 1,656 |
19-Mar-2009 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
3,01 7,528 |
19-Mar-2009 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
1,0 54,520 |
19-Mar-2009 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
799, 032 |
19-Mar-2009 |
05:13 |
x86 |
Risinājums
Lai novērstu šo problēmu, pievienot vienu vai vairākus fiktīva "unsigned char" dalībniekus paplašināšanai lieluma struktūra vai mazākais vairāku baitu astoņas klases. Piemēram, pagarināt 14 baitiem līdz 16 baitus.
Statuss
Korporācija Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir minēti sadaļā "Attiecas uz".
Papildinformācija
Lai iegūtu papildinformāciju par programmatūras atjauninājumu terminoloģiju, noklikšķiniet uz šī raksta numura un lasiet Microsoft zināšanu bāzes rakstu:
824684 tiek izmantota Microsoft programmatūras atjauninājumu standarta terminoloģijas apraksts
Problēmas atveidošanas darbības
-
Veidot lietojumprogrammas nosaukumu Test.cpp, izmantojot šo kodu 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;
} -
Kompilēt programmu, izmantojot šādu komandu:
CL test.cpp /O2 /MD
Paredzamais rezultāts ir 4. Tomēr faktiskais rezultāts ir 0.