Застосовується до
Windows Vista Service Pack 2 Windows 7 Service Pack 1 Windows Server 2008 Service Pack 2 Windows Server 2008 R2 Service Pack 1 Windows 8 Windows Server 2012 Datacenter Windows Server 2012 Datacenter Windows Server 2012 Essentials Windows Server 2012 Foundation Windows Server 2012 Foundation Windows Server 2012 Standard Windows Server 2012 Standard Windows Server 2012 R2 Datacenter Windows Server 2012 R2 Essentials Windows Server 2012 R2 Foundation Windows Server 2012 R2 Standard Windows 8.1

Причини

Під час зразки коду, що динамічно цілі Microsoft .NET Framework 4.5.1 або Microsoft .NET Framework 4.5.2 і код, методи, (наприклад, використання сценарію Windows PowerShell, IronPython, IronRuby або динамічний мову), викликає метод System.Runtime.InteropServices.Marshal.SizeOf або System.Runtime.InteropServices.Marshal.PtrToStructure спосіб, можуть виникнути такі проблеми.Примітка Код, який вже зібрано на керовані виконуваний файл не виявляє ці проблеми, якщо код, що використовує динамічний ключове слово C#.

Проблема 1

Виклики System.Runtime.InteropServices.Marshal.SizeOf кидати за винятком таких MethodInvocationException :

Введіть "<ім'я типу>", не призначеного як структуру некерованого; немає змістовне розмір або зсув можна обчислити.

Проблема 2

Виклики System.Runtime.InteropServices.Marshal.PtrToStructure кидати за винятком таких MethodInvocationException :

Указаний структури blittable або має розташування інформації.

Проблема 3

Виклики System.Runtime.InteropServices.Marshal.PtrToStructure кидати за винятком таких RuntimeBinderException :

Не можна перетворити неявно типу "недійсним", "об'єкт".

Причина

Ця проблема виникає в тому, що сценарії системи та динамічні мови може зв'язати новий перевантаження, що з'являються у .NET Framework. Зокрема, виклики, які раніше, використовувати Marshal.SizeOf(Type) , тепер можна назвати Marshal.SizeOf < T > (T), а також виклики, які використовуються Marshal.PtrToStructure (IntPtr, текст) , тепер, зателефонуйте Marshal.PtrToStructure < T >(IntPtr, T). Ця зміна причини, методи або виконання сполучна скинути про виняткову ситуацію.

Виправлення помилок

Щоб тимчасово усунути цю проблему, можна змінити код так, що використовується правильний перевантаження, якщо вашої мови дозволяє це зробити. Якщо не можна вказати певний метод-перевантаження, змінити код таким чином, щоб воно використовувало новий спосіб перевантаження належним чином замість нього.

Для динамічного виклику C#

Додати відтінок System.Type за виклик спосіб розмір або методу PtrToStructure. Наприклад:

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

Примітка Це лише необхідно за однієї з метод аргументи динамічний.

Для сценаріїв Windows PowerShell

Додати відтінок System.Type за виклик спосіб розмір або методу PtrToStructure. Наприклад:

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

IronPython сценаріїв.

Створити новий екземпляр типу тип та введіть новий спосіб перевантаження. Наприклад:

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

Стан

Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".

Посилання

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.