예제 #1
0
        public static MethodBuilder DefineMethod(this TypeBuilder builder, string name, MethodAttributes attributes, MethodSignature signature)
        {
            var t    = TypeOf <MethodBuilder> .TypeID;
            var modb = (ModuleBuilder)builder.Module;
            var mod  = GetNativeModule(modb);

            byte[]        sig = signature.GetSignature(modb);
            int           tok = DefineMethodInternal.Invoke(mod, builder.TypeToken.Token, name, sig, sig.Length, attributes);
            MethodBuilder mb  = NewMethod.Invoke(
                name, attributes, signature.CallingConvention, signature.ReturnType,
                signature.ParameterTypes, modb, builder, false
                );

            mb.GetToken();             //returns 0 but circumvents the RSA error (?)
            SetToken.Invoke(mb, NewMethodToken(tok));
            GetMethodList.Invoke(builder).Add(mb);
            return(mb);
        }