Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Причини

Під час зразки коду, що динамічно цілі 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)

Стан

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

Посилання

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

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

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

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

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×