Bei 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?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×