Masuk dengan Microsoft
Masuk atau buat akun.
Halo,
Pilih akun lain.
Anda memiliki beberapa akun
Pilih akun yang ingin Anda gunakan untuk masuk.

Gejala

Ketika kode yang mentargetkan Microsoft .NET Framework 4.5.1 atau Microsoft .NET Framework 4.5.2, dan kode dinamis mengikat metode (misalnya, menggunakan skrip Windows PowerShell, IronPython, IronRuby atau bahasa dinamis lainnya) memanggil metode System.Runtime.InteropServices.Marshal.SizeOf atau metode System.Runtime.InteropServices.Marshal.PtrToStructure , Anda mungkin mengalami masalah berikut ini.

Catatan Kode yang telah dikumpulkan ke eksekusi terkelola tidak menunjukkan masalah ini, kecuali kode yang menggunakan kata kunci dinamis di C#.

Masalah 1

Panggilan ke System.Runtime.InteropServices.Marshal.SizeOf membuang pengecualian MethodInvocationException berikut ini:

Ketik ' <nama jenis>' tidak dapat marshalled sebagai struktur tidak dikelola; tidak berarti ukuran atau offset dapat dihitung.

Masalah 2

Panggilan ke System.Runtime.InteropServices.Marshal.PtrToStructure membuang pengecualian MethodInvocationException berikut ini:

Struktur tertentu harus blittable atau memiliki informasi tata letak.


Masalah 3

Panggilan ke System.Runtime.InteropServices.Marshal.PtrToStructure membuang pengecualian RuntimeBinderException berikut ini:

Implisit tidak dapat mengubah jenis 'Batal' 'objek'.


Penyebab

Masalah ini terjadi karena skrip mesin dan bahasa dinamis dapat mengikat berlebihan baru yang diperkenalkan di .NET Framework. Khususnya, panggilan yang sebelumnya digunakan Marshal.SizeOf(Type) sekarang dapat memanggil Marshal.SizeOf < T > (T), dan panggilan yang digunakan Marshal.PtrToStructure (IntPtr, jenis) sekarang dapat memanggil Marshal.PtrToStructure < T >(IntPtr, T). Perubahan ini menyebabkan metode atau binder runtime untuk membuang pengecualian.

Pemecahan masalah

Untuk mengatasi masalah ini, Ubah kode sehingga menggunakan berlebihan benar jika bahasa Anda memungkinkan Anda untuk melakukannya. Jika Anda tidak dapat menentukan metode tertentu yang berlebihan, Ubah kode sehingga menggunakan metode yang baru berlebihan dengan benar sebagai gantinya.

Untuk C# permintaan dinamis

Menambah pemain System.Type dalam panggilan ke metode SizeOf atau metode PtrToStructure. Misalnya:

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


Catatan Hal ini hanya diperlukan jika salah satu argumen metode dinamis.

Untuk skrip Windows PowerShell

Menambah pemain System.Type dalam panggilan ke metode SizeOf atau metode PtrToStructure. Misalnya:

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

Untuk skrip IronPython

Membuat contoh jenis baru dari jenis, dan kemudian gunakan metode yang baru berlebihan. Misalnya:

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

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

Status

Microsoft telah memastikan bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".

Referensi

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.

Apakah informasi ini berguna?

Seberapa puaskah Anda dengan kualitas bahasanya?
Apa yang memengaruhi pengalaman Anda?
Dengan menekan kirim, umpan balik Anda akan digunakan untuk meningkatkan produk dan layanan Microsoft. Admin TI Anda akan dapat mengumpulkan data ini. Pernyataan Privasi.

Terima kasih atas umpan balik Anda!

×