 <p>IIRC, you need to decorate the delegate signature with a calling convention. Unfortunately, this can only be done via IL or generating the stub with Reflection.Emit.</p> <p>You can try this:</p> <pre><code>protected static Type MakeDelegateType(Type returntype, List&lt;Type&gt; paramtypes) { ModuleBuilder dynamicMod = ... ; // supply this TypeBuilder tb = dynamicMod.DefineType("delegate-maker" + Guid.NewGuid(), TypeAttributes.Public | TypeAttributes.Sealed, typeof(MulticastDelegate)); tb.DefineConstructor(MethodAttributes.RTSpecialName | MethodAttributes.SpecialName | MethodAttributes.Public | MethodAttributes.HideBySig, CallingConventions.Standard, new Type[] { typeof(object), typeof(IntPtr) }). SetImplementationFlags(MethodImplAttributes.Runtime); var inv = tb.DefineMethod("Invoke", MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.NewSlot | MethodAttributes.HideBySig, CallingConventions.Standard ,returntype,null, new Type[] { // this is the important bit typeof(System.Runtime.CompilerServices.CallConvCdecl) }, paramtypes.ToArray(), null, null); inv.SetImplementationFlags(MethodImplAttributes.Runtime); var t = tb.CreateType(); return t; } </code></pre>