Skip to content

Commit

Permalink
More nullability work, mostly Shell32
Browse files Browse the repository at this point in the history
  • Loading branch information
dahall committed Nov 20, 2023
1 parent 7a463b8 commit c5ecf5e
Show file tree
Hide file tree
Showing 9 changed files with 29 additions and 22 deletions.
3 changes: 2 additions & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<Version>4.0.0</Version>
<Version>4.0.0-beta</Version>
<TargetFrameworks>net45;net48;net6.0;net7.0;netstandard2.0;netcoreapp3.1</TargetFrameworks>
<Configurations>Debug;Release</Configurations>
<Platforms>AnyCPU;x64;x86</Platforms>
Expand All @@ -9,6 +9,7 @@
<Authors>David Hall</Authors>
<Company>GitHub Community</Company>
<Copyright>Copyright © 2017-2023</Copyright>
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
Expand Down
8 changes: 4 additions & 4 deletions PInvoke/SearchApi/SearchApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -895,7 +895,7 @@ public interface IFilter
// origPos, REFIID riid, void **ppunk );
[PInvokeData("filter.h")]
[PreserveSig]
HRESULT BindRegion([In] FILTERREGION origPos, [In] in Guid riid, [MarshalAs(UnmanagedType.IUnknown, IidParameterIndex = 1)] out object ppunk);
HRESULT BindRegion([In] FILTERREGION origPos, [In] in Guid riid, [MarshalAs(UnmanagedType.IUnknown, IidParameterIndex = 1)] out object? ppunk);
}

/// <summary>
Expand Down Expand Up @@ -944,7 +944,7 @@ public interface ILoadFilter
[PInvokeData("filtereg.h", MSDNShortId = "920c976e-4dde-4e53-85b7-7547291736a0")]
[PreserveSig]
HRESULT LoadIFilter([In, Optional, MarshalAs(UnmanagedType.LPWStr)] string? pwcsPath, in FILTERED_DATA_SOURCES pFilteredSources, [In, MarshalAs(UnmanagedType.IUnknown)] object? pUnkOuter,
[In, MarshalAs(UnmanagedType.Bool)] bool fUseDefault, out Guid pFilterClsid, [Optional] IntPtr SearchDecSize, [Optional] IntPtr pwcsSearchDesc, out IFilter ppIFilt);
[In, MarshalAs(UnmanagedType.Bool)] bool fUseDefault, out Guid pFilterClsid, [Optional] IntPtr SearchDecSize, [Optional] IntPtr pwcsSearchDesc, out IFilter? ppIFilt);

/// <summary>
/// <para>Not implemented.</para>
Expand All @@ -965,7 +965,7 @@ HRESULT LoadIFilter([In, Optional, MarshalAs(UnmanagedType.LPWStr)] string? pwcs
[PInvokeData("filtereg.h", MSDNShortId = "b4eff132-9022-4091-a2a3-1d8e11a35b39")]
[Obsolete, PreserveSig]
HRESULT LoadIFilterFromStorage([In] IStorage pStg, [In, MarshalAs(UnmanagedType.IUnknown)] object? pUnkOuter, [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsOverride,
[In, MarshalAs(UnmanagedType.Bool)] bool fUseDefault, out Guid pFilterClsid, [Optional] IntPtr SearchDecSize, [Optional] IntPtr pwcsSearchDesc, out IFilter ppIFilt);
[In, MarshalAs(UnmanagedType.Bool)] bool fUseDefault, out Guid pFilterClsid, [Optional] IntPtr SearchDecSize, [Optional] IntPtr pwcsSearchDesc, out IFilter? ppIFilt);

/// <summary>
/// <para>Not implemented.</para>
Expand All @@ -986,7 +986,7 @@ HRESULT LoadIFilterFromStorage([In] IStorage pStg, [In, MarshalAs(UnmanagedType.
[PInvokeData("filtereg.h", MSDNShortId = "6a577306-d5ff-43c1-ab9f-3a7437661d2a")]
[Obsolete, PreserveSig]
HRESULT LoadIFilterFromStream([In] IStream pStm, in FILTERED_DATA_SOURCES pFilteredSources, [In, MarshalAs(UnmanagedType.IUnknown)] object? pUnkOuter,
[In, MarshalAs(UnmanagedType.Bool)] bool fUseDefault, out Guid pFilterClsid, [Optional] IntPtr SearchDecSize, [Optional] IntPtr pwcsSearchDesc, out IFilter ppIFilt);
[In, MarshalAs(UnmanagedType.Bool)] bool fUseDefault, out Guid pFilterClsid, [Optional] IntPtr SearchDecSize, [Optional] IntPtr pwcsSearchDesc, out IFilter? ppIFilt);
}

/// <summary>
Expand Down
2 changes: 1 addition & 1 deletion PInvoke/Shell32/ShObjIdl.IExplorerBrowser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ public interface IExplorerBrowser
/// </param>
/// <param name="dwFlags">One of the EXPLORER_BROWSER_FILL_FLAGS values.</param>
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
void FillFromObject([In, MarshalAs(UnmanagedType.IUnknown)] object punk, [In] EXPLORER_BROWSER_FILL_FLAGS dwFlags);
void FillFromObject([In, MarshalAs(UnmanagedType.IUnknown)] object? punk, [In] EXPLORER_BROWSER_FILL_FLAGS dwFlags);

/// <summary>Removes all items from the results folder.</summary>
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
Expand Down
12 changes: 6 additions & 6 deletions PInvoke/Shell32/ShObjIdl.IExplorerCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ public interface IExplorerCommand
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-iexplorercommand-gettitle HRESULT GetTitle(
// IShellItemArray *psiItemArray, LPWSTR *ppszName );
[PreserveSig]
HRESULT GetTitle(IShellItemArray psiItemArray, [MarshalAs(UnmanagedType.LPWStr)] out string ppszName);
HRESULT GetTitle(IShellItemArray psiItemArray, [MarshalAs(UnmanagedType.LPWStr)] out string? ppszName);

/// <summary>Gets an icon resource string of the icon associated with the specified Windows Explorer command item.</summary>
/// <param name="psiItemArray">
Expand All @@ -188,7 +188,7 @@ public interface IExplorerCommand
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-iexplorercommand-geticon HRESULT GetIcon(
// IShellItemArray *psiItemArray, LPWSTR *ppszIcon );
[PreserveSig]
HRESULT GetIcon(IShellItemArray psiItemArray, [MarshalAs(UnmanagedType.LPWStr)] out string ppszIcon);
HRESULT GetIcon(IShellItemArray psiItemArray, [MarshalAs(UnmanagedType.LPWStr)] out string? ppszIcon);

/// <summary>Gets the tooltip string associated with a specified Windows Explorer command item.</summary>
/// <param name="psiItemArray">
Expand All @@ -206,7 +206,7 @@ public interface IExplorerCommand
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-iexplorercommand-gettooltip HRESULT
// GetToolTip( IShellItemArray *psiItemArray, LPWSTR *ppszInfotip );
[PreserveSig]
HRESULT GetToolTip(IShellItemArray psiItemArray, [MarshalAs(UnmanagedType.LPWStr)] out string ppszInfotip);
HRESULT GetToolTip(IShellItemArray psiItemArray, [MarshalAs(UnmanagedType.LPWStr)] out string? ppszInfotip);

/// <summary>Gets the GUID of an Windows Explorer command.</summary>
/// <param name="pguidCommandName">
Expand Down Expand Up @@ -340,7 +340,7 @@ public interface IExplorerCommand
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-iexplorercommand-enumsubcommands HRESULT
// EnumSubCommands( IEnumExplorerCommand **ppEnum );
[PreserveSig]
HRESULT EnumSubCommands(out IEnumExplorerCommand ppEnum);
HRESULT EnumSubCommands(out IEnumExplorerCommand? ppEnum);
}

/// <summary>Exposes methods to create Explorer commands and command enumerators.</summary>
Expand Down Expand Up @@ -378,7 +378,7 @@ public interface IExplorerCommandProvider
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-iexplorercommandprovider-getcommands
// HRESULT GetCommands( IUnknown *punkSite, REFIID riid, void **ppv );
[PreserveSig]
HRESULT GetCommands([MarshalAs(UnmanagedType.IUnknown)] object punkSite, in Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);
HRESULT GetCommands([MarshalAs(UnmanagedType.IUnknown)] object punkSite, in Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object? ppv);

// IExplorerCommand
/// <summary>Gets a specified Explorer command instance.</summary>
Expand All @@ -401,7 +401,7 @@ public interface IExplorerCommandProvider
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-iexplorercommandprovider-getcommand HRESULT
// GetCommand( REFGUID rguidCommandId, REFIID riid, void **ppv );
[PreserveSig]
HRESULT GetCommand(in Guid rguidCommandId, in Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);
HRESULT GetCommand(in Guid rguidCommandId, in Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object? ppv);
}

/// <summary>Exposes a single method that allows retrieval of the command state.</summary>
Expand Down
4 changes: 2 additions & 2 deletions PInvoke/Shell32/ShObjIdl.INamespaceWalk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ public interface INamespaceWalkCB
// https://docs.microsoft.com/en-us/windows/desktop/api/shobjidl_core/nf-shobjidl_core-inamespacewalkcb-initializeprogressdialog
// HRESULT InitializeProgressDialog( LPWSTR *ppszTitle, LPWSTR *ppszCancel );
[PreserveSig]
HRESULT InitializeProgressDialog([Out, MarshalAs(UnmanagedType.LPWStr)] out string ppszTitle, [Out, MarshalAs(UnmanagedType.LPWStr)] out string ppszCancel);
HRESULT InitializeProgressDialog([Out, MarshalAs(UnmanagedType.LPWStr)] out string? ppszTitle, [Out, MarshalAs(UnmanagedType.LPWStr)] out string? ppszCancel);
}

/// <summary>
Expand Down Expand Up @@ -421,7 +421,7 @@ public interface INamespaceWalkCB2 : INamespaceWalkCB
// https://docs.microsoft.com/en-us/windows/desktop/api/shobjidl_core/nf-shobjidl_core-inamespacewalkcb-initializeprogressdialog
// HRESULT InitializeProgressDialog( LPWSTR *ppszTitle, LPWSTR *ppszCancel );
[PreserveSig]
new HRESULT InitializeProgressDialog([Out, MarshalAs(UnmanagedType.LPWStr)] out string ppszTitle, [Out, MarshalAs(UnmanagedType.LPWStr)] out string ppszCancel);
new HRESULT InitializeProgressDialog([Out, MarshalAs(UnmanagedType.LPWStr)] out string? ppszTitle, [Out, MarshalAs(UnmanagedType.LPWStr)] out string? ppszCancel);

/// <summary>Removes data collected during a namespace walk.</summary>
/// <param name="hr">
Expand Down
12 changes: 6 additions & 6 deletions PInvoke/Shell32/ShObjIdl.IShellFolder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ public interface ICategoryProvider
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-icategoryprovider-createcategory HRESULT
// CreateCategory( const GUID *pguid, REFIID riid, void **ppv );
[PreserveSig]
HRESULT CreateCategory(in Guid pguid, in Guid riid, [MarshalAs(UnmanagedType.IUnknown, IidParameterIndex = 1)] out object ppv);
HRESULT CreateCategory(in Guid pguid, in Guid riid, [MarshalAs(UnmanagedType.IUnknown, IidParameterIndex = 1)] out object? ppv);
}

/// <summary>Creates a category object.</summary>
Expand Down Expand Up @@ -1093,7 +1093,7 @@ public interface IShellFolder
// GetUIObjectOf( HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *rgfReserved, void **ppv );
[PreserveSig]
HRESULT GetUIObjectOf(HWND hwndOwner, uint cidl, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] IntPtr[] apidl, in Guid riid,
[In, Out, Optional] IntPtr rgfReserved, [MarshalAs(UnmanagedType.Interface, IidParameterIndex = 3)] out object ppv);
[In, Out, Optional] IntPtr rgfReserved, [MarshalAs(UnmanagedType.Interface, IidParameterIndex = 3)] out object? ppv);

/// <summary>Retrieves the display name for the specified file object or subfolder.</summary>
/// <param name="pidl">
Expand Down Expand Up @@ -1604,7 +1604,7 @@ public interface IShellFolder2 : IShellFolder
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishellfolder-createviewobject
[PreserveSig]
new HRESULT CreateViewObject(HWND hwndOwner, in Guid riid, [MarshalAs(UnmanagedType.Interface, IidParameterIndex = 1)] out object ppv);
new HRESULT CreateViewObject(HWND hwndOwner, in Guid riid, [MarshalAs(UnmanagedType.Interface, IidParameterIndex = 1)] out object? ppv);

/// <summary>Gets the attributes of one or more file or folder objects contained in the object represented by IShellFolder.</summary>
/// <param name="cidl">
Expand Down Expand Up @@ -1744,7 +1744,7 @@ public interface IShellFolder2 : IShellFolder
// GetUIObjectOf( HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *rgfReserved, void **ppv );
[PreserveSig]
new HRESULT GetUIObjectOf(HWND hwndOwner, uint cidl, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] IntPtr[] apidl, in Guid riid,
[In, Out, Optional] IntPtr rgfReserved, [MarshalAs(UnmanagedType.Interface, IidParameterIndex = 3)] out object ppv);
[In, Out, Optional] IntPtr rgfReserved, [MarshalAs(UnmanagedType.Interface, IidParameterIndex = 3)] out object? ppv);

/// <summary>Retrieves the display name for the specified file object or subfolder.</summary>
/// <param name="pidl">
Expand Down Expand Up @@ -1889,7 +1889,7 @@ public interface IShellFolder2 : IShellFolder
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishellfolder2-enumsearches
[PreserveSig]
HRESULT EnumSearches(out IEnumExtraSearch ppenum);
HRESULT EnumSearches(out IEnumExtraSearch? ppenum);

/// <summary>Gets the default sorting and display columns.</summary>
/// <param name="dwRes">
Expand Down Expand Up @@ -2012,7 +2012,7 @@ public interface IShellFolder2 : IShellFolder
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishellfolder2-getdetailsex
[PreserveSig]
HRESULT GetDetailsEx([In] PIDL pidl, in PROPERTYKEY pscid, [MarshalAs(UnmanagedType.Struct)] out object pv);
HRESULT GetDetailsEx([In] PIDL pidl, in PROPERTYKEY pscid, [MarshalAs(UnmanagedType.Struct)] out object? pv);

/// <summary>Gets detailed information, identified by a column index, on an item in a Shell folder.</summary>
/// <param name="pidl">
Expand Down
2 changes: 1 addition & 1 deletion PInvoke/Shell32/ShObjIdl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1221,7 +1221,7 @@ public interface IFileIsInUse
// https://docs.microsoft.com/en-us/windows/desktop/api/shobjidl_core/nf-shobjidl_core-ifileisinuse-getappname HRESULT
// GetAppName( LPWSTR *ppszName );
[PreserveSig]
HRESULT GetAppName([MarshalAs(UnmanagedType.LPWStr)] out string ppszName);
HRESULT GetAppName([MarshalAs(UnmanagedType.LPWStr)] out string? ppszName);

/// <summary>Gets a value that indicates how the file in use is being used.</summary>
/// <param name="pfut">
Expand Down
3 changes: 2 additions & 1 deletion PInvoke/Shell32/ShlObj.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma warning disable IL2050 // Correctness of COM interop cannot be guaranteed after trimming. Interfaces and interface members might be removed.
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Security;
using static Vanara.Extensions.BitHelper;
Expand Down Expand Up @@ -5268,7 +5269,7 @@ public static extern HRESULT SHCreateFileExtractIconW([MarshalAs(UnmanagedType.L
// PCIDLIST_ABSOLUTE pidlParent, IShellFolder *psfParent, PCUITEMID_CHILD pidl, IShellItem **ppsi );
[DllImport(Lib.Shell32, SetLastError = false, ExactSpelling = true)]
[PInvokeData("shlobj_core.h", MSDNShortId = "d4371cdf-a8f4-4a39-ba66-97fd40ed46ae")]
public static extern HRESULT SHCreateShellItem(PIDL pidlParent, IShellFolder? psfParent, PIDL pidl, out IShellItem ppsi);
public static extern HRESULT SHCreateShellItem([Optional] PIDL pidlParent, [Optional] IShellFolder? psfParent, PIDL pidl, out IShellItem? ppsi);

/// <summary>
/// <para>
Expand Down
5 changes: 5 additions & 0 deletions PInvoke/Ws2_32/WinSock2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2511,6 +2511,11 @@ private SafeSOCKET() : base() { }
/// <returns>The result of the conversion.</returns>
public static implicit operator SOCKET(SafeSOCKET h) => h.handle;

/// <summary>Performs an implicit conversion from <see cref="SafeSOCKET"/> to <see cref="SOCKET"/>.</summary>
/// <param name="h">The safe handle instance.</param>
/// <returns>The result of the conversion.</returns>
public static implicit operator SOCKET?(SafeSOCKET? h) => h?.handle;

/// <inheritdoc/>
protected override bool InternalReleaseHandle() => closesocket(this) == 0;
}
Expand Down

0 comments on commit c5ecf5e

Please sign in to comment.