Logige sisse Microsofti kontoga
Logige sisse või looge konto.
Tere!
Valige mõni muu konto.
Teil on mitu kontot
Valige konto, millega soovite sisse logida.

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.

Kogukonnad aitavad teil küsimusi esitada ja neile vastuseid saada, anda tagasisidet ja saada nõu rikkalike teadmistega asjatundjatelt.

Kas sellest teabest oli abi?

Kui rahul te keelekvaliteediga olete?
Mis mõjutas teie hinnangut?
Kui klõpsate nuppu Edasta, kasutatakse teie tagasisidet Microsofti toodete ja teenuste täiustamiseks. IT-administraator saab neid andmeid koguda. Privaatsusavaldus.

Täname tagasiside eest!

×