Mit Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

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?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?

Vielen Dank für Ihr Feedback!

×