Skip to content

Commit

Permalink
Fix Interop.Gdi32.StartDoc p/invoke (#76569)
Browse files Browse the repository at this point in the history
StartDoc takes a pointer to a DOCINFO struct. We had DOCINFO defined as a class on the managed side such that built-in marshalling would marshal it as a pointer. With the switch to custom marshalling via NativeMarshalling, we ended up marshalling the struct that is the native representation rather than a pointer to it.

This switches the DOCINFO to a struct and updates the parameter to StartDoc to be in, such that it should be marshalled as a pointer to the struct by both generated and built-in marshalling.
  • Loading branch information
elinor-fung committed Oct 4, 2022
1 parent 6294ab1 commit a6d3960
Showing 1 changed file with 4 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ internal static partial int StartDoc(
#if NET7_0_OR_GREATER
[MarshalUsing(typeof(HandleRefMarshaller))]
#endif
HandleRef hDC, DOCINFO lpDocInfo);
HandleRef hDC, in DOCINFO lpDocInfo);

[LibraryImport(Libraries.Gdi32, SetLastError = true)]
internal static partial int StartPage(
Expand Down Expand Up @@ -179,14 +179,16 @@ internal unsafe struct BITMAPINFO_FLAT
[NativeMarshalling(typeof(Marshaller))]
#endif
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
internal sealed class DOCINFO
internal struct DOCINFO
{
internal int cbSize = 20;
internal string? lpszDocName;
internal string? lpszOutput;
internal string? lpszDatatype;
internal int fwType;

public DOCINFO() { }

#if NET7_0_OR_GREATER
[CustomMarshaller(typeof(DOCINFO), MarshalMode.ManagedToUnmanagedIn, typeof(Marshaller))]
public static class Marshaller
Expand Down

0 comments on commit a6d3960

Please sign in to comment.