Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

Príznaky

Keď kód, ktorý sa zameriava na Microsoft .NET Framework 4.5.1 alebo Microsoft .NET Framework 4.5.2 a kód dynamicky sa viaže na metódy (napríklad pomocou skriptu prostredia Windows PowerShell, IronPython, IronRuby alebo iný dynamický jazyk) vyžaduje vyžadujeSystem.Runtime.InteropServices.Marshal.sizeof metóda alebo System.Runtime.InteropServices.Marshal.PtrToStructure metóda, môžu sa vyskytnúť nasledujúce problémy.

Poznámka: Kód, ktorý je už zostavené do spustiteľného spravované nevykazuje tieto problémy, ak kód používa dynamické kľúčové slovo v jazyku C#.

Problém 1

Hovory vyžadujeSystem.Runtime.InteropServices.Marshal.sizeof hodiť tieto MethodInvocationException :

Typ "<názov typu>" nemôžu byť zaradené ako nespravované; zmysel veľkosť ani pozícia môže byť vypočítaná.

Problém 2

Žiada, aby System.Runtime.InteropServices.Marshal.PtrToStructure hodiť tieto MethodInvocationException :

Uvedené štruktúry musia byť blittable alebo rozloženie informácie.


Problém 3

Žiada, aby System.Runtime.InteropServices.Marshal.PtrToStructure hodiť RuntimeBinderException nasledujúce výnimky:

Nemožno implicitne konvertovať typu "neplatné" k "objekt".


Príčina

Tento problém sa vyskytuje, pretože skriptovanie mechanizmy a dynamických jazykov môže viazať na nové preťaženia, ktorý je predstavený v .NET Framework. Konkrétne, hovory, ktoré predtým používané Marshal.SizeOf(Type) teraz volať Marshal.SizeOf < T > (T)a hovory, ktoré používajú Marshal.PtrToStructure (IntPtr, typ) teraz volať Marshal.PtrToStructure < T >(IntPtr, T). Táto zmena spôsobí metódy alebo runtime rýchloviazača hodiť výnimku.

Alternatívne riešenie

Ak chcete vyriešiť tento problém, zmeniť kód používa správne preťaženia Ak jazyk, ktorý umožňuje vykonať. Ak nemôžete určiť špecifická metóda preťaženia, Zmeňte kód tak, že využíva nová metóda preťaženia správne miesto.

Pre C# dynamické vyvolania

Pridať obsadenie System.Type v rámci volanie SizeOf metóda alebo PtrToStructure. Napríklad:

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


Poznámka: Je to len potrebné jeden z argumentov postup pri dynamických.

Pre skriptov prostredia Windows PowerShell

Pridať obsadenie System.Type v rámci volanie SizeOf metóda alebo PtrToStructure. Napríklad:

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

Skripty IronPython

Vytvoriť nový typ inštanciu typu a potom použite nový spôsob preťaženia. Napríklad:

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

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

Stav

Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.

Odkazy

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×