A tiny hack of the System.Private.CoreLib to provide missed Unmanaged EmitCalli implementation at the .NET Standard 2.0 layer.
An Unmanaged EmitCalli is available only with .NET Core 2.1+ [?] That turns into a quest when you need .NET Standard 2.0 targeting.
This, however, does not require a full reimplementing or a huge dependencies like Cecil etc.
Because you can simply use the same techniques as we do 3F/Conari#13 (comment)
UnmanagedEmitCalli provides most common implementation that can be used either through dependencies or copy-paste of a bit of source code. Enjoy!
This was used initially for 🧬 Conari - Platform for working with unmanaged memory, pe-modules, related PInvoke features, and more for: Libraries, Executable Modules, enjoying of the unmanaged native C/C++ in .NET world, and other raw binary data. Even accessing to complex types like structures without their declaration at all.
Same for .NET Framework and .NET Core
ILGenerator il = dyn.GetILGenerator();
for(int i = 0; i < mParams.Length; ++i) {
il.Emit(OpCodes.Ldarg, i);
}
if(IntPtr.Size == sizeof(Int64)) {
il.Emit(OpCodes.Ldc_I8, ptr.ToInt64());
}
else {
il.Emit(OpCodes.Ldc_I4, ptr.ToInt32());
}
il.EmitCalliStd(CallingConvention.Cdecl, tret, mParams);
il.Emit(OpCodes.Ret);
Open Source project; MIT License, Yes! Enjoy!
Copyright (c) 2019-2021 Denis Kuzmin <x-3F@outlook.com> github/3F
[ ☕ Donate ]
UnmanagedEmitCalli contributors https://github.com/3F/UnmanagedEmitCalli/graphs/contributors
Make your amazing contribution!