From 9d535bd98e7190b6189a7f84b76260070d4a3f39 Mon Sep 17 00:00:00 2001 From: Amer Koleci Date: Fri, 2 Sep 2022 13:44:18 +0200 Subject: [PATCH] Map more foundation types. --- src/Generator/Program.cs | 20 +++++++++++++++++--- src/Vortice.Win32/IUnknown.cs | 23 +++++++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/Generator/Program.cs b/src/Generator/Program.cs index 2ea6c1f..db68967 100644 --- a/src/Generator/Program.cs +++ b/src/Generator/Program.cs @@ -40,17 +40,31 @@ public static class Program {"Char", "ushort" }, { "Foundation.BOOL", "Bool32" }, + { "Foundation.BOOLEAN", "byte" }, + { "Foundation.BSTR", "char*" }, + { "Foundation.HANDLE", "IntPtr" }, + { "Foundation.HINSTANCE", "IntPtr" }, { "Foundation.HRESULT", "HResult" }, + { "Foundation.HWND", "IntPtr" }, + { "Foundation.LPARAM", "IntPtr" }, + { "Foundation.LRESULT", "IntPtr" }, + { "Foundation.WPARAM", "UIntPtr" }, + { "Foundation.PSTR", "byte*" }, + { "Foundation.PWSTR", "char*" }, + { "Foundation.CHAR", "byte" }, + { "Foundation.LUID", "Luid" }, { "Foundation.LARGE_INTEGER", "LargeInterger" }, { "System.Com.IUnknown", "IUnknown" }, // TODO: Understand those -> - { "Foundation.HWND", "IntPtr" }, - { "Foundation.HANDLE", "IntPtr" }, - { "Foundation.POINT", "System.Drawing.Point" }, { "Foundation.RECT", "RawRect" }, + { "Foundation.RECTL", "RawRect" }, + { "Foundation.POINT", "System.Drawing.Point" }, + { "Foundation.POINTL", "System.Drawing.Point" }, + { "Foundation.SIZE", "System.Drawing.Size" }, + { "Graphics.Gdi.HMONITOR", "IntPtr" }, }; diff --git a/src/Vortice.Win32/IUnknown.cs b/src/Vortice.Win32/IUnknown.cs index 46b1bd8..35f0330 100644 --- a/src/Vortice.Win32/IUnknown.cs +++ b/src/Vortice.Win32/IUnknown.cs @@ -17,7 +17,11 @@ public unsafe partial struct IUnknown : IUnknown.Interface [VtblIndex(0)] public HResult QueryInterface([NativeTypeName("const IID &")] Guid* riid, void** ppvObject) { +#if NET6_0_OR_GREATER + return ((delegate* unmanaged)(lpVtbl[0]))((IUnknown*)Unsafe.AsPointer(ref this), riid, ppvObject); +#else return ((delegate* unmanaged[Stdcall])(lpVtbl[0]))((IUnknown*)Unsafe.AsPointer(ref this), riid, ppvObject); +#endif } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -25,7 +29,11 @@ public unsafe partial struct IUnknown : IUnknown.Interface [return: NativeTypeName("ULONG")] public uint AddRef() { +#if NET6_0_OR_GREATER + return ((delegate* unmanaged)(lpVtbl[1]))((IUnknown*)Unsafe.AsPointer(ref this)); +#else return ((delegate* unmanaged[Stdcall])(lpVtbl[1]))((IUnknown*)Unsafe.AsPointer(ref this)); +#endif } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -33,7 +41,11 @@ public unsafe partial struct IUnknown : IUnknown.Interface [return: NativeTypeName("ULONG")] public uint Release() { +#if NET6_0_OR_GREATER + return ((delegate* unmanaged)(lpVtbl[2]))((IUnknown*)Unsafe.AsPointer(ref this)); +#else return ((delegate* unmanaged[Stdcall])(lpVtbl[2]))((IUnknown*)Unsafe.AsPointer(ref this)); +#endif } public interface Interface @@ -53,6 +65,16 @@ public unsafe partial struct IUnknown : IUnknown.Interface public partial struct Vtbl where TSelf : unmanaged, Interface { +#if NET6_0_OR_GREATER + [NativeTypeName("HRESULT (const IID &, void **) __attribute__((stdcall))")] + public delegate* unmanaged QueryInterface; + + [NativeTypeName("ULONG () __attribute__((stdcall))")] + public delegate* unmanaged AddRef; + + [NativeTypeName("ULONG () __attribute__((stdcall))")] + public delegate* unmanaged Release; +#else [NativeTypeName("HRESULT (const IID &, void **) __attribute__((stdcall))")] public delegate* unmanaged[Stdcall] QueryInterface; @@ -61,5 +83,6 @@ public unsafe partial struct IUnknown : IUnknown.Interface [NativeTypeName("ULONG () __attribute__((stdcall))")] public delegate* unmanaged[Stdcall] Release; +#endif } }