Når bør jeg eksplisitt angi en StructLayout?

stemmer
5

Jeg fikle med å kalle DLLs fra C #, og kom over behovet for å definere mine egne structs. Masse artikler tvinge en sekvensiell layout for struct med

[StructLayout(LayoutKind.Sequential)]
struct Foo ...

Så jeg fulgte suite, og min programmet fungerte. Nå, når jeg tok linje ut, fortsatt fungerer. Hvorfor trenger jeg det?

Publisert på 26/12/2008 klokken 16:25
kilden bruker
På andre språk...                            


3 svar

stemmer
4

Den interne utformingen av en administrert struct er udokumentert og undiscoverable. Implementering detaljer som medlem orden og pakking er bevisst skjult. Med [StructLayout] attributt, tvinger man den P / Påberope marshaller for å innføre en bestemt oppsett og pakking.

Som standard bare skjer for å matche det du trenger for å få koden til arbeid er bare en ulykke. Selv ikke en uvanlig en. Legg merke til Type.StructLayoutAttribute eiendom.

Svarte 26/12/2008 kl. 16:41
kilden bruker

stemmer
1

Interessant poeng. Jeg er sikker på at jeg hadde kode som mislyktes før jeg satt i en eksplisitt LayoutKind.Sequential, men jeg har bekreftet Sekvensiell er standard for strukturer selv i 1.1.

Legg merke til VB Reference for struktur innebærer at Merknader> Atferd> minneforbruket som du trenger å angi StructLayout å bekrefte minne layout, men dokumentasjonen for StructLayoutAttribute sier Sekvensiell er standard for strukturer i Microsoft kompilatorer.

Svarte 17/03/2010 kl. 04:43
kilden bruker

stemmer
0

Jeg er ikke helt sikker, men det kan påvirke binær serialisering - det kan spytte ut feltene i orden med ikke å navngi eller bestillingsinformasjon (som resulterer i en mindre fil), men det er en komplett innfall.

Svarte 27/12/2008 kl. 12:02
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more