Skip to content

Latest commit

 

History

History
50 lines (38 loc) · 1.79 KB

marshal_sizeof-and-marshal_ptrtostructure-overloads-break-dynamic-code.md

File metadata and controls

50 lines (38 loc) · 1.79 KB

Marshal.SizeOf and Marshal.PtrToStructure overloads break dynamic code

Scope

Minor

Version Introduced

4.5.1

Source Analyzer Status

Available

Change Description

Beginning in the .NET Framework 4.5.1, dynamically binding to the methods xref:System.Runtime.InteropServices.Marshal.SizeOf``1, xref:System.Runtime.InteropServices.Marshal.SizeOf``1(``0), xref:System.Runtime.InteropServices.Marshal.PtrToStructure(System.IntPtr,System.Object), xref:System.Runtime.InteropServices.Marshal.PtrToStructure(System.IntPtr,System.Type), xref:System.Runtime.InteropServices.Marshal.PtrToStructure``1(System.IntPtr), or xref:System.Runtime.InteropServices.Marshal.PtrToStructure``1(System.IntPtr,``0), (via Windows PowerShell, IronPython, or the C# dynamic keyword, for example) can result in MethodInvocationExceptions because new overloads of these methods have been added that may be ambiguous to the scripting engines.

  • Quirked
  • Build-time break

Recommended Action

Update scripts to clearly indicate which overload should be used. This can typically done by explicitly casting the methods' type parameters as xref:System.Type. See this link for more detail and examples of how to workaround the issue.

Affected APIs

  • Not detectable via API analysis

Category

Core

More information