Aanmelden met Microsoft
Meld u aan of maak een account.
Hallo,
Selecteer een ander account.
U hebt meerdere accounts
Kies het account waarmee u zich wilt aanmelden.

Symptomen

Wanneer code die gericht is op het Microsoft .NET Framework 4.5.1 of Microsoft .NET Framework 4.5.2 en de code dynamisch aan gebonden methoden (bijvoorbeeld met behulp van een script in Windows PowerShell, IronPython, IronRuby of een andere dynamische taal) roept de methode System.Runtime.InteropServices.Marshal.SizeOf of System.Runtime.InteropServices.Marshal.PtrToStructure , kunnen de volgende problemen optreden.

Opmerking Code die reeds is gecompileerd naar een beheerde uitvoerbare vertonen deze problemen, tenzij die code gebruikt het gereserveerde woord dynamic in C#.

Probleem 1

Aanroepen van System.Runtime.InteropServices.Marshal.SizeOf de volgende MethodInvocationException uitzondering genereren:

Type ' <naam>' kan niet worden samengevoegd als niet-begeleide structuur; geen relevante grootte of offset worden berekend.

Probleem 2

Aanroepen van System.Runtime.InteropServices.Marshal.PtrToStructure de volgende MethodInvocationException uitzondering genereren:

De opgegeven structuur moet blittable of informatie over de opmaak hebben.


Probleem 3

Aanroepen van System.Runtime.InteropServices.Marshal.PtrToStructure de volgende RuntimeBinderException uitzondering genereren:

Kan het type void naar 'object' impliciet converteren.


Oorzaak

Dit probleem treedt op omdat de script-engines en dynamische talen wordt gebonden aan een nieuwe overbelasting die is geïntroduceerd in het .NET Framework. Met name oproepen die vroeger Marshal.SizeOf(Type) kunnen nu bellen Marshal.SizeOf < T > (T)en gesprekken die Marshal.PtrToStructure (IntPtr, Type gebruikt) kunnen nu een beroep doen Marshal.PtrToStructure < T >(IntPtr, T). Deze wijziging zorgt ervoor dat de methoden of in de binder runtime een uitzondering.

Tijdelijke oplossing

U kunt dit probleem omzeilen, moet u de code wijzigen zodat de juiste overbelasting wordt gebruikt als uw taal, kunt u dit doen. Als u een specifieke methode overbelasting opgeven kunt, de code wijzigen zodat deze de nieuwe methode overbelasting goed in plaats daarvan.

Voor dynamische aanroep C#

Cast aan System.Type toevoegen in de aanroep van de methode SizeOf of PtrToStructure. Bijvoorbeeld:

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


Opmerking Dit is alleen nodig wanneer een van de argumenten van de methode dynamisch is.

Voor Windows PowerShell-scripts

Cast aan System.Type toevoegen in de aanroep van de methode SizeOf of PtrToStructure. Bijvoorbeeld:

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

Voor scripts IronPython

Maak een nieuw exemplaar van het type en gebruik vervolgens de nieuwe methode overbelasting. Bijvoorbeeld:

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

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

Status

Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Referenties

Meer hulp nodig?

Meer opties?

Verken abonnementsvoordelen, blader door trainingscursussen, leer hoe u uw apparaat kunt beveiligen en meer.

Community's helpen u vragen te stellen en te beantwoorden, feedback te geven en te leren van experts met uitgebreide kennis.

Was deze informatie nuttig?

Hoe tevreden bent u met de taalkwaliteit?
Wat heeft uw ervaring beïnvloed?
Als u op Verzenden klikt, wordt uw feedback gebruikt om producten en services van Microsoft te verbeteren. Uw IT-beheerder kan deze gegevens verzamelen. Privacyverklaring.

Hartelijk dank voor uw feedback.

×