Ausnahmen in Windows-PowerShell, anderen dynamische Sprachen und in dynamisch ausgeführtem C# code, wenn code, der auf .NET-Framework abzielt, bestimmte Methoden abruft.

Arbeiten Sie überall, von jedem beliebigen Gerät, mit Microsoft 365

Führen Sie ein Upgrade auf Microsoft 365 durch, um überall mit den neuesten Funktionen und Updates zu arbeiten.

Upgrade jetzt ausführen

Problembeschreibung

Wenn Code, Microsoft.NET Framework 4.5.1 oder Microsoft.NET Framework 4.5.2 und Code dynamisch abzielt, bindet Methoden (z. B. mit einem Skript in Windows PowerShell, IronPython, IronRuby oder einer anderen dynamischen Sprache) System.Runtime.InteropServices.Marshal.SizeOf -Methode oder die System.Runtime.InteropServices.Marshal.PtrToStructure -Methode aufruft, treten möglicherweise die folgenden Probleme.

Hinweis Code, der bereits in eine verwaltete ausführbare Datei kompiliert wird nicht diese Probleme aufweisen, wenn Code dynamic -Schlüsselwort in C# verwendet.

Problem 1

Aufrufe System.Runtime.InteropServices.Marshal.SizeOf Ausnahme die folgenden MethodInvocationException :

Typ "<Type Name>" kann nicht als nicht verwaltete Struktur gemarshallt werden; keine sinnvolle Größe oder Offset berechnet.

Problem 2

Aufrufe System.Runtime.InteropServices.Marshal.PtrToStructure Ausnahme die folgenden MethodInvocationException :

Die angegebene Struktur muss blitfähig oder Layoutinformationen enthalten.


Problem 3

Aufrufe System.Runtime.InteropServices.Marshal.PtrToStructure Ausnahme die folgenden RuntimeBinderException :

Typ 'void', 'Objekt' kann nicht implizit konvertiert werden.


Ursache

Dieses Problem tritt auf, weil Motoren scripting und dynamische Sprachen möglicherweise Binden an eine neue Überladung in.NET Framework eingeführt. Insbesondere Aufrufe, die früher Marshal.SizeOf(Type) können jetzt Marshal.SizeOf < T > (T)und Aufrufe, mit denen Marshal.PtrToStructure (IntPtr, Typ) können jetzt aufgerufen Marshal.PtrToStructure < T >(IntPtr, T). Diese Änderung bewirkt, dass Methoden oder Laufzeitbinder eine Ausnahme ausgelöst.

PROBLEMUMGEHUNG

Um dieses Problem zu umgehen, ändern Sie den Code, damit die richtige Überladung verwendet, wenn Ihre Sprache dazu ermöglicht. Wenn Sie eine bestimmte methodenüberladung angeben können, ändern Sie den Code, damit er die neue methodenüberladung korrekt verwendet.

Für C# dynamischen Aufruf

Hinzufügen einer System.Type innerhalb der SizeOf -Methode oder die Methode PtrToStructure. Beispiel:

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


Hinweis Dies ist nur erforderlich, wenn eines der Argumente der Methode dynamisch ist.

Windows PowerShell-Skripts

Hinzufügen einer System.Type innerhalb der SizeOf -Methode oder die Methode PtrToStructure. Beispiel:

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

IronPython-Skripts

Erstellen Sie eine neue Typinstanz des Typs, und verwenden Sie die neue methodenüberladung. Beispiel:

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

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

Status

Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.

Referenzen

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Vielen Dank für Ihr Feedback!

Vielen Dank für Ihr Feedback. Es klingt, als ob es hilfreich sein könnte, Sie mit einem unserer Office-Supportmitarbeiter zu verbinden.

×