Rakenduskoht
Windows Vista Service Pack 2 Windows 7 Service Pack 1 Windows Server 2008 Service Pack 2 Windows Server 2008 R2 Service Pack 1 Windows 8 Windows Server 2012 Datacenter Windows Server 2012 Datacenter Windows Server 2012 Essentials Windows Server 2012 Foundation Windows Server 2012 Foundation Windows Server 2012 Standard Windows Server 2012 Standard Windows Server 2012 R2 Datacenter Windows Server 2012 R2 Essentials Windows Server 2012 R2 Foundation Windows Server 2012 R2 Standard Windows 8.1

Sümptomid

Kui koodi, mis on suunatud Microsoft .NET Frameworki 4.5.1 või Microsoft .NET Frameworki 4.5.2 ja kood dünaamiliselt seondub meetodeid (näiteks kasutades skripti Windows PowerShelli, IronPython, IronRuby või dünaamiliste keelte) nõuab kutsubSystem.Runtime.InteropServices.Marshal.SizeOf meetodit või meetodit System.Runtime.InteropServices.Marshal.PtrToStructure , võivad ilmneda järgmised probleemid.Märkus. Koodi, mis on juba koostanud hallatava käivitatava käituvad nende probleemide korral, kui see kood kasutab dünaamilise märksõna C#.

1. probleem

Kõned System.Runtime.InteropServices.Marshal.SizeOf viska MethodInvocationException järgmise erandiga:

' <Nimi>' ei saa pakkida haldamata struktuur; erinevust ega tähendusrikas suurus arvutatakse.

2. probleem

Kõned System.Runtime.InteropServices.Marshal.PtrToStructure viska MethodInvocationException järgmise erandiga:

Kindlaksmääratud struktuuri tuleb blittable või paigutuse teavet.

Küsimus 3

Kõned System.Runtime.InteropServices.Marshal.PtrToStructure viska RuntimeBinderException järgmise erandiga:

Tüüp 'tühised' "objektile" kaudselt ei saa teisendada.

Põhjus

Selle probleemi põhjuseks skriptimine mootorid ja dünaamiline tekst võib siduda .NET Frameworki kasutusele uue ülekoormus. Täpsemalt nõuab, et varem kasutatud Marshal.SizeOf(Type) võib nüüd kõne Marshal.SizeOf < T > (T)ja kõned, mida kasutatakse Marshal.PtrToStructure (IntPtr, tüüp) võib nüüd kõne Marshal.PtrToStructure < T >(IntPtr, T). See muudatus põhjustab runtime sideaine ilmnenud erand või meetodeid.

Lahendus

Selle probleemi lahendamiseks muutke kood, et ta kasutab õige ülekoormus, kui teie keel võimaldab teil seda teha. Kui te ei saa määrata konkreetset meetodit ülekoormus, muuta koodi, et ta kasutab uus meetod ülekoormuse õigesti hoopis.

C# dünaamiline kutsumise jaoks

Lisage ka osades System.Type maksimaalselt kõne suuruseks või meetodi PtrToStructure. Näiteks:

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

Märkus. See on vajalik ainult siis, kui üks meetod argumendid on dünaamiline.

Windows PowerShelli skriptide jaoks

Lisage ka osades System.Type maksimaalselt kõne suuruseks või meetodi PtrToStructure. Näiteks:

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

IronPython skripte

Tippige uue eksemplari tüüp luua, ja seejärel kasutage uus meetod ülekoormuse. Näiteks:

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

Olek

Microsoft on kinnitanud, et see probleem esineb jaotises "Kehtib järgmiste toodete kohta" loetletud Microsofti toodetel.

Viited

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.