Pierakstīties, izmantojot Microsoft
Pierakstīties vai izveidot kontu
Sveicināti!
Atlasīt citu kontu.
Jums ir vairāki konti
Izvēlieties kontu, ar kuru vēlaties pierakstīties.

Pazīmes

Kods, kas vērsti Microsoft .NET Framework 4.5.1 vai Microsoft .NET Framework 4.5.2 un kodu dinamiski saistās metodes (piemēram, izmantojot skriptu Windows PowerShell, IronPython, IronRuby vai cita dinamiskā valoda) izsauc metodi System.Runtime.InteropServices.Marshal.SizeOf vai System.Runtime.InteropServices.Marshal.PtrToStructure metodi, var rasties šādas problēmas.

Piezīme. Kodu, kas jau apkopoti uz pārvaldīto izpildāmais fails nedrīkst būt šīs problēmas, ja šo kodu izmanto dinamisko atslēgvārdu c#.

1. problēma

Zvanu System.Runtime.InteropServices.Marshal.SizeOf mest MethodInvocationException šādu izņēmumu:

' <Tipa nosaukums>' nevar pārvieto nepārvaldīts struktūras; nobīde jebkādiem nozīmīgs lielums var būt aprēķināts.

2. problēma

Zvanu System.Runtime.InteropServices.Marshal.PtrToStructure mest MethodInvocationException šādu izņēmumu:

Norādīto struktūru jābūt blittable vai izkārtojuma informāciju.


3. problēma

Zvanu System.Runtime.InteropServices.Marshal.PtrToStructure mest RuntimeBinderException šādu izņēmumu:

Nevar tieši konvertēt tipu "anulēts" "objekts".


Cēlonis

Šī problēma rodas, jo skriptošanas programmas un dinamiskā valodās var piesaistīt jaunu pārslodzes, kas ir ieviests .NET Framework. Īpaši, ziņo, ka iepriekš izmantota Marshal.SizeOf(Type) tagad varat zvanīt Marshal.SizeOf < T > (T)un tagad varat zvanīt zvani, kas izmanto Marshal.PtrToStructure (IntPtr, tips) Marshal.PtrToStructure < T >(IntPtr, T). Šīs izmaiņas rada metodes vai izpildlaika binder mest izņēmumu.

Risinājums

Lai novērstu šo problēmu, mainiet kodu tā, ka tiek izmantota pareizā pārslodzes ja valodu ļauj to izdarīt. Norādot konkrētu metodi pārslodzes, nevar mainīt kodu, lai tā izmanto jauno metodi pārslodzes pareizi vietā.

Lai c# dinamisko izņēmumus

Pievienojiet vairākumu System.Type SizeOf metode vai metodes PtrToStructurezvana laikā. Piemērs:

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


Piezīme. Tas ir nepieciešams tikai viena metode argumentus darbojas dinamiskā.

Windows PowerShell skripti

Pievienojiet vairākumu System.Type SizeOf metode vai metodes PtrToStructurezvana laikā. Piemērs:

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

IronPython skripti

Izveidojiet ierakstiet jaunā tipa un pēc tam izmantojiet jauno metodi pārslodzes. Piemērs:

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

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

Statuss

Korporācija Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir minēti sadaļā "Attiecas uz".

Atsauces

Nepieciešama papildu palīdzība?

Vēlaties vairāk opciju?

Izpētiet abonementa priekšrocības, pārlūkojiet apmācības kursus, uzziniet, kā aizsargāt ierīci un veikt citas darbības.

Kopienas palīdz uzdot jautājumus un atbildēt uz tiem, sniegt atsauksmes, kā arī saņemt informāciju no ekspertiem ar bagātīgām zināšanām.

Vai šī informācija bija noderīga?

Cik lielā mērā esat apmierināts ar valodas kvalitāti?
Kas ietekmēja jūsu pieredzi?
Nospiežot Iesniegt, jūsu atsauksmes tiks izmantotas Microsoft produktu un pakalpojumu uzlabošanai. Jūsu IT administrators varēs vākt šos datus. Paziņojums par konfidencialitāti.

Paldies par jūsu atsauksmēm!

×