Well, not sure why that's implemented as is, interop is some old technology and there are quirks or whatever. But .NET provides convenience methods/delegates, like typed Action<>[1] (or Func<>) with 16 arguments, so you don't have to explicitly define delegate yourself:
[1] https://docs.microsoft.com/en-us/dotnet/api/system.action-16...
Today as of C# 4 you can for example have optional arguments. Not sure if this applies to this method which surely predates C#4.
Today as of C# 4 you can for example have optional arguments. Not sure if this applies to this method which surely predates C#4.