用反射调用任意.net库中的方法

  函数如下,有注释,请自行查看:)注:1、ReturnMessage 是我自写的一个类,作用请查看我的其他文章,我也把这个类一并附在后面2、通过NameSpaceAndClassName和MethodName实际上就可以精确定位一个方法了如调用abc.dll里的namespace1.Class1.Main,调用起来就是CallAssembly("abc.dll","namespace1.Class1","Main",null) public static ReturnMessage CallAssembly(string Path,string NameSpaceAndClassName,string MethodName,object[] Parameters)
        {
            try
            {
                Assembly Ass=Assembly.LoadFrom(Path);//调入文件(不限于dll,exe亦可,只要是.net)
                Type TP=Ass.GetType(NameSpaceAndClassName);//NameSpaceAndClassName是"名字空间.类名",如"namespace1.Class1"
                MethodInfo MI=TP.GetMethod(MethodName);//MethodName是要调用的方法名,如"Main"
                object MeObj=System.Activator.CreateInstance(TP);
                MI.Invoke(MeObj,Parameters);//Parameters是调用目标方法时传入的参数列表
                return new ReturnMessage(true,"成功调用",1);
            }
            catch(Exception e)
            {
                return new ReturnMessage(false,"出现异常,消息为:"+e.Message,-1,e);
            }
        } 附ReturnMessagepublic class ReturnMessage
    {
        public ReturnMessage()
        {
            this.m_Succeed=false;
            this.m_Message="";
            this.m_Code=-1000;
            this.m_Data=null;
        }
        public ReturnMessage(bool IsSucceed)
        {
            this.m_Succeed=IsSucceed;
        }
        public ReturnMessage(bool IsSucceed,string Message)
        {
            this.m_Succeed=IsSucceed;
            this.m_Message=Message;
        }
        public ReturnMessage(bool IsSucceed,string Message,int Code)
        {
            this.m_Succeed=IsSucceed;
            this.m_Message=Message;
            this.m_Code=Code;
        }
        public ReturnMessage(bool IsSucceed,string Message,int Code,object Data)
        {
            this.m_Succeed=IsSucceed;
            this.m_Message=Message;
            this.m_Code=Code;
            this.m_Data=Data;
        }
        public ReturnMessage(bool IsSucceed,string Message,int Code,object Data,object[] Datas)
        {
            this.m_Succeed=IsSucceed;
            this.m_Message=Message;
            this.m_Code=Code;
            this.m_Data=Data;
            this.m_Datas=Datas;
        }
        //
        bool m_Succeed;
        string m_Message;
        int m_Code;
        object m_Data;
        object[] m_Datas;
        public bool Succeed
        {
            get{return m_Succeed;}
            set{m_Succeed=value;}
        }
        public string Message
        {
            get{return m_Message;}
            set{m_Message=value;}
        }
        public int Code
        {
            get{return m_Code;}
            set{m_Code=value;}
        }
        public object Data
        {
            get{return m_Data;}
            set{m_Data=value;}
        }
        public object[] Datas
        {
            get{return m_Datas;}
            set{m_Datas=value;}
        }
    }

时间: 2024-11-30 08:12:10

用反射调用任意.net库中的方法的相关文章

action 没有跳转-Action中调用另一个类中的方法时没有跳转,但是新建的其他测试类就可以跳转,WHY?

问题描述 Action中调用另一个类中的方法时没有跳转,但是新建的其他测试类就可以跳转,WHY? action中调用EmailUtil中的sendHtmlMail方法: public void forgetPassword() throws Exception { String email = request.getParameter("email"); User u=userService.getByEmail(email); Json json=new Json(); if (St

转型-关于如何通过子类调用父类的父类中的方法

问题描述 关于如何通过子类调用父类的父类中的方法 package access; class A{ public A(){System.out.println("A created!");} public int f(){ System.out.println("call A.f()"); return 1; } } class B extends A{ public int f(){ System.out.println("call B.f()"

javascript-如何实现一个js调用另外一个js中的方法

问题描述 如何实现一个js调用另外一个js中的方法 两个js文件分别有一个方法写在$(function(){ 方法...}),如何实现一个js调用另外一个js中的方法.调用方法就会报错:Uncaught ReferenceError: addNode is not defined 解决方案 ?? 例如一个test.js内容如下:function main( input ){?? return input;}在C++中调用方法如下:// vcJscript.cpp : 定义控制台应用程序的入口点.

关于winform中多线程调用AX控件中的方法会阻塞UI线程的问题

问题描述 本人新手...winform中子线程调用AX控件中的某个耗时的方法(3.4秒)会阻塞UI线程,请问有没有办法在子线程中创建AX控件,让子线程去执行AX控件中的方法呢? 解决方案 解决方案二:你可以尝试直接在新的线程里执行该方法,不行的话只能由控件编写者提供异步的方法解决方案三:winform中子线程调用AX控件中的某个耗时的方法(3.4秒)会阻塞UI线程既然你是在子线程里调用,为什么会阻塞UI线程?放出你的代码来解决方案四:控件是vc写的,拖到form上的,SCM_Card_Chb是控

用java的反射机制,能不能调用到单例模式类中的方法(非静态)?

问题描述 1.HelloWorld 类:public class HelloWorld { private static HelloWorld instance = null; private HelloWorld() { } public static HelloWorld getInstance() { if (instance == null) { instance = new HelloWorld(); } return instance; } public void sayHello(

使用反射获取字节码文件中的方法

public class ReflectMethod { /** * 方法的反射 * @param args */ public static void main(String[] args) throws Exception { String str1="www.baidu.com"; System.out.println(str1.charAt(2)); //我们平时的时候是使用str1.charAt()去调用的方法,然后获取到第二个字符 /** * String str1=&qu

JavaScript的jQuery库中ready方法的学习教程_jquery

学习 jQuery 有许多途径,我们今天从 jQuery 的 ready 函数开始.本例中的代码都来自于 jQuery 脚本库. 如果你使用过 jQuery , 就必然使用过 ready 函数,它用来注册当页面准备好之后可以执行的函数. 问题来啦,我们的页面什么时候准备好了呢? onload 事件最基本的处理方式就是页面的 onload 事件,我们在处理这个事件的时候,可以有多种方式,即可以通过 HTML 方式,直接写在 body 元素的开始标记中,也可以使用事件注册的方式来使用,这又可以分为

c++-C++ 时间调用除了boost库还有什么第三方

问题描述 C++ 时间调用除了boost库还有什么第三方 在做C++的项目过程中,原来对于时间的处理部分直接调用了Boost库中提供的gregorian和posix_time命名空间中的方法.现在由于某些方面的原因,需要解除对boost库的依赖.请问除了调用c++基本库中的方法有什么其他的可用第三方时间调用库吗? 解决方案 既然要用其它第三方,为啥不选boost 解决方案二: boost稍显庞大,工程需要多平台支持.boost多个平台需要分别编译对应的版本.出现错误,调试起来也比较麻烦 解决方案

WAS V7 能否实现共享库中jar包的动态加载

问题描述 各位老师好:我最近做了一个项目,用到了websphere中的共享库我想实现这样一个功能:当上传一个jar到指定的共享库目录中部署的应用就能够反射调用这个jar包中的class.而不需要重新启动应用.请大家不吝赐教,这里谢谢各位了.我的邮箱zhangyueming@neusoft.com 解决方案 解决方案二:应该不可以解决方案三:好复杂的,可以尝试替换ClassLoaderparent=Thread.currentThread().getContextClassLoader();Cla