Microsoft hesabıyla oturum açın
Oturum açın veya hesap oluşturun.
Merhaba,
Farklı bir hesap seçin.
Birden çok hesabınız var
Oturum açmak istediğiniz hesabı seçin.

Belirtiler

4.5.1 Microsoft .NET Framework veya Microsoft .NET Framework 4.5.2 ve kod dinamik olarak hedefleyen kod bağlar (örneğin, Windows PowerShell, IronPython, IronRuby veya başka bir dinamik dil komut dosyası kullanarak) yöntemleri System.Runtime.InteropServices.Marshal.sizeof veya System.Runtime.InteropServices.Marshal.PtrToStructure yöntemini çağırır, aşağıdaki sorunlarla karşılaşabilirsiniz.

Not: Bu kod C# ' ta dynamic anahtar kullanmadıkça yönetilen bir yürütülebilir dosyada önceden derlenmiş kod bu sorunlar getirmeyi göstermez.

Sorun 1

System.Runtime.InteropServices.Marshal.sizeof çağrıları aşağıdaki MethodInvocationException özel durum:

Türü ' <türü adı>' yönetilmeyen bir yapıyı sıraya olamaz; anlamlı boyutu ya da uzaklık hesaplanabilir.

Sorun 2

System.Runtime.InteropServices.Marshal.PtrToStructure çağrıları aşağıdaki MethodInvocationException özel durum:

Belirtilen yapıya blittable veya yerleşim bilgilerine sahip gerekir.


Sorun 3

System.Runtime.InteropServices.Marshal.PtrToStructure çağrıları aşağıdaki RuntimeBinderException özel durum:

Dolaylı olarak 'için 'object' void' türü dönüştürülemiyor.


Neden

Komut dosyası altyapılarındaki nedeniyle bu sorun oluşur ve dinamik dillerin .NET Framework içinde tanıtılan yeni bir aşırı bağlamak. Özellikle, eskiden Marshal.SizeOf(Type) kullanılan şimdi çağrılarına Marshal.SizeOf < T > (T)ve Marshal.PtrToStructure (IntPtr, türü) kullanılan şimdi çağrılarına Marshal.PtrToStructure < T >(IntPtr, T). Bu değişiklik, yöntemler veya bir özel durum için çalışma zamanı cilt neden olur.

Geçici çözüm

Bu soruna geçici bir çözüm için dilinizi, bunu yapmanızı sağlar, doğru aşırı yüklemeyi kullanır, böylece kodu değiştirin. Belirli yöntem yüklemesini belirtemiyorsanız, böylece yeni yöntem yüklemesini doğru yerine kullandığı kodu değiştirin.

C# dinamik çağrı için

Bir dönüştürme için System.Type içinde SizeOf veya PtrToStructureyöntemini çağrısı ekleyin. Örneğin:

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


Not: Bu sadece bir yöntem için bağımsız değişkenlerden biri dinamik olduğunda gereklidir.

Windows PowerShell komut dosyaları için

Bir dönüştürme için System.Type içinde SizeOf veya PtrToStructureyöntemini çağrısı ekleyin. Örneğin:

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

IronPython komut dosyaları için

Yeni bir tür örnek türü oluşturabilir ve sonra yeni yöntem yüklemesini kullanın. Örneğin:

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

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

Durum

Microsoft bu sorunun "Aşağıdakilere Uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.

Başvurular

Daha fazla yardıma mı ihtiyacınız var?

Daha fazla seçenek mi istiyorsunuz?

Abonelik avantajlarını keşfedin, eğitim kurslarına göz atın, cihazınızın güvenliğini nasıl sağlayacağınızı öğrenin ve daha fazlasını yapın.

Topluluklar, soru sormanıza ve soruları yanıtlamanıza, geri bildirimde bulunmanıza ve zengin bilgiye sahip uzmanlardan bilgi almanıza yardımcı olur.

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?
Gönder’e bastığınızda, geri bildiriminiz Microsoft ürün ve hizmetlerini geliştirmek için kullanılır. BT yöneticiniz bu verileri toplayabilecek. Gizlilik Bildirimi.

Geri bildiriminiz için teşekkürler!

×