For the record this has been discussed here: https://github.com/jbevain/cecil/issues/145
On Thu, Nov 28, 2013 at 10:02 PM, the Fiddler <[email protected]> wrote: > Using regular System.Reflection.Emit, I can emit an unmanaged calli with the > following: > > ILGenerator il; > il.EmitCalli(OpCodes.Calli, > CallingConvention.Winapi, > typeof(void), > new Type[] { typeof(int), typeof(string) }); > > Winapi translates to the default calling convention for the current platform > (stdcall on Windows, cdecl otherwise) and this works as expected. > > I am trying to recreate this call with Cecil: > > IlProcessor il; > var site = new CallSite(module.Import(typeof(void)) > { > CallingConvention = MethodCallingConvention.Default > }; > site.Parameters.Add(module.Import(typeof(int)); > site.Parameters.Add(module.Import(typeof(string)); > il.Emit(OpCodes.Calli, site); > > But the string now comes out wrong on the unmanaged side. > > If I specify MethodCallingConvention.Stdcall, this specific case works > correctly, but the solution becomes Windows-specific. (Other methods with 4+ > parameters still appear to fail, but this could also be a bug in my code.) > > If I use Xamarin Studio 4.2.1 to disassemble the dll, I get the following: > > > ldarg.0 > ldarg.1 > calli System.Void(System.Int32,System.String) > > i.e. the calli signature does not indicate any specific calling convention > or the fact that it is calling an unmanaged method. I do not know if this is > a bug in the Xamarin Studio disassembler (isn't it actually using Cecil?) or > a genuine cause for concern (no signature means managed fastcall, which > might explain the garbled string, correct?) > > I am using the git master from jbevain/cecil (commit 8425de4db6). > > Ideas welcome! > > -- > -- > -- > mono-cecil > --- > You received this message because you are subscribed to the Google Groups > "mono-cecil" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. -- -- -- mono-cecil --- You received this message because you are subscribed to the Google Groups "mono-cecil" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
