首页 新闻 搜索 专区 学院

怎么在程序中动态调用一个DLL文件里的方法,取这个方法里得到的值

0
悬赏园豆:50 [已解决问题] 解决于 2010-01-05 08:37

我写了一个方法:

public IList<string> getArray()
{
            IList<string> rtn = new List<string>();
            foreach (string str in strlist)
            {
                rtn.Add(str);
            }
            strlist.Clear();
            return rtn;
}

我把这个方法保存为DLL文件。

我从另外一个程序动态调用这个DLL文件,运用这个方法,我代码要怎么写才能动态调用到这个DLL,还能取到getArray()方法的值?请求大虾们帮助。

大草包的主页 大草包 | 小虾三级 | 园豆:1745
提问于:2009-12-30 15:35
< >
分享
最佳答案
0

private object Invoke(string lpFileName, string Namespace, string ClassName, string lpProcName)
        {
            try
            { // 载入程序集
                Assembly MyAssembly = Assembly.LoadFrom(lpFileName);
                Type[] type = MyAssembly.GetTypes();
                foreach (Type t in type)
                {// 查找要调用的命名空间及类
                    if (t.Namespace == Namespace && t.Name == ClassName)
                    {// 查找要调用的方法并进行调用
                        MethodInfo m = t.GetMethod(lpProcName);
                        if (m != null)
                        {
                            object o = Activator.CreateInstance(t);

                            string s = (string)m.Invoke(o, null);
                            return m.Invoke(o,null);
                        }
                        else MessageBox.Show(" 装载出错 !");
                    }
                }
            }//try
            catch (System.NullReferenceException e)
            {
                MessageBox.Show(e.Message);
            }//catch
            return (object)0;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(Invoke("DataLogic.exe", "DataLogic", "Form1", "getArray").ToString());
        }

收获园豆:50
VIP.net | 初学一级 |园豆:15 | 2010-01-05 08:35
其他回答(3)
0

这个容易,点击 文件-新建-项目  ,然后选择类库,建好一个类库之后你可以新建一个类文件,然后把你的方法写进去,编译通过之后去项目的类库名文件夹DeBug文件夹里你会看到一个类库名.dll 的文件,这个就是你想要的,然后再其他项目中使用时,在项目上右键选择添加引用-- 选择浏览,然后选择路径把那个DLL文件导入进来就可以了,在要使用的页面 用using 引用一下就OK了。

死神的背影 | 园豆:660 (小虾三级) | 2009-12-30 15:59
大哥我要动态的,代码实现,你说的我会。
支持(0) 反对(0) 大草包 | 园豆:1745 (小虾三级) | 2009-12-30 16:10
0

反射,网上搜搜,一把一把的……

比如 http://blog.csdn.net/jamex/archive/2009/03/25/4024043.aspx

里面是load一个exe,和load dll一样的。

Cheese | 园豆:509 (小虾三级) | 2009-12-30 17:45
0

反射~~

用到:

Assembly.LoadFrom方法

Type.GetMethods方法

MethodInfo.Invoke方法~~

 

或者直接用Type.InvokeMember方法。

查下MSDN就可以了。

undefined | 园豆:698 (小虾三级) | 2009-12-31 13:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册