Logg på med Microsoft
Logg på, eller opprett en konto.
Hei,
Velg en annen konto.
Du har flere kontoer
Velg kontoen du vil logge på med.

Symptomer

Når koden som er rettet mot Microsoft .NET Framework 4.5.1 eller Microsoft .NET Framework 4.5.2 og koden dynamisk bindes til metoder (for eksempel ved hjelp av et skript i Windows PowerShell, IronPython, IronRuby eller andre dynamiske språk) kaller metoden System.Runtime.InteropServices.Marshal.SizeOf eller metoden System.Runtime.InteropServices.Marshal.PtrToStructure , kan du oppleve følgende problemer.

Obs! Som allerede er kompilert til en kjørbar fil for forvaltet kode ikke forårsaker disse problemene med mindre koden bruker dynamiske nøkkelordet i C#.

Problem 1

Kall til System.Runtime.InteropServices.Marshal.SizeOf kvitter følgende unntak i MethodInvocationException :

Type ' <navnfor >' kan ikke være arrangert som en uadministrert struktur; ingen mening størrelse eller forskyvningen kan beregnes.

Problem 2

Kall til System.Runtime.InteropServices.Marshal.PtrToStructure kvitter følgende unntak i MethodInvocationException :

Den angitte strukturen må inneholde eller ha oppsettinformasjon.


3-problem

Kall til System.Runtime.InteropServices.Marshal.PtrToStructure kvitter følgende unntak i RuntimeBinderException :

Kan ikke implisitt konverteres type 'void' til 'objekt'.


Årsak

Dette problemet oppstår fordi skriptmotorer og dynamiske språk kan binde til en ny overbelastning som ble introdusert i .NET Framework. Spesielt samtaler som tidligere ble brukt av Marshal.SizeOf(Type) kan nå ringe Marshal.SizeOf < T > (T), og kall som brukes av Marshal.PtrToStructure (IntPtr, Type) kan nå ringe Marshal.PtrToStructure < T >(IntPtr, T). Denne endringen fører til at metodene eller runtime dokumentordneren til Iverksett et unntak.

Løsningen

Du kan omgå dette problemet ved å endre koden slik at den bruker riktig overbelastning Hvis språket ditt, kan du gjøre dette. Hvis du ikke angir en bestemt metode overbelastning, må du endre koden slik at den bruker den nye metoden overbelastningen på riktig måte i stedet.

For C# dynamisk anrop

Legge til en endring i System.Type i kall til metoden SizeOf eller metoden PtrToStructure. For eksempel:

object obj = System.Runtime.InteropServices.Marshal.PtrToStructure(ptr, (System.Type)type);int size = System.Runtime.InteropServices.Marshal.SizeOf((System.Type)type);


Obs! Dette er bare nødvendig når ett av argumentene til metoden er dynamisk.

Windows PowerShell-skript

Legge til en endring i System.Type i kall til metoden SizeOf eller metoden PtrToStructure. For eksempel:

$size = [System.Runtime.InteropServices.Marshal]::SizeOf([System.Type] $type)
$obj = [System.Runtime.InteropServices.Marshal]::PtrToStructure($ptr, [System.Type] $type)

IronPython-skript

Opprette en ny typeforekomst av typen, og deretter bruke den nye metoden overbelastningen. For eksempel:

typeInstance = type()
size = System.Runtime.InteropServices.Marshal.SizeOf(typeInstance)

obj = System.Runtime.InteropServices.Marshal.PtrToStructure(ptr, typeInstance)

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".

Referanser

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.

Fellesskap hjelper deg med å stille og svare på spørsmål, gi tilbakemelding og høre fra eksperter med stor kunnskap.

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?
Når du trykker på Send inn, blir tilbakemeldingen brukt til å forbedre Microsoft-produkter og -tjenester. IT-administratoren kan samle inn disse dataene. Personvernerklæring.

Takk for tilbakemeldingen!

×