• C# 动态加载dll(.net)示例


    dll函数库源码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    namespace cl1
    {
        public class Class1
        {
            private  string Name;
            private int Age;
            public Class1() { Name = "name"; Age = 0; }
            public Class1(string name) { Name = name; Age = 0; }
            public Class1(string name,int age) { Name = name; Age = age; }
            public static void M1()
            {
                MessageBox.Show("静态无参函数");
            }
            public static void M2(string name)
            {
                MessageBox.Show($"静态带参函数String{name}");
            }
            public static void M2(string name, int age)
            {
                MessageBox.Show($"静态带参函数int{name+age}");
            }
            public void M3()
            {
                MessageBox.Show($"非静态无参函数name={Name},age={Age}");
            }
            public void M4(string name)
            {
                MessageBox.Show($"非静态带参函数string{name}");
            }
            public void M4(int age)
            {
                MessageBox.Show($"非静态带参函数int{age}");
            }
            public void M5(string name) { MessageBox.Show(name); }
        }
    }
    View Code

    调用尝试

    public static void test()
            {
                Assembly assembly;
                Type type;
    
                string path = @"G:BaseSelfBasiccl1inDebugcl1.dll";
                assembly = Assembly.LoadFrom(path);
                //获取程序集实例中具有指定名称的Type对象
                type = assembly.GetType("cl1.Class1");
                //获取Class1对象
                var C1 = Activator.CreateInstance(type);//构造函数public Class1() 
                var C2 = Activator.CreateInstance(type, "string");//构造函数public Class1(string name) 
                var C3 = Activator.CreateInstance(type, "string", 123);//构造函数public Class1(string name,int age) 
                //获取方法
                var m1 = type.GetMethod("M1");//方法名M1在Class1类中没有重载,获取明确 方法为私有或不存在时返回null
                var val1 = m1.Invoke(null, null);//运行m1 M1函数为静态的,且无参,Invoke中参数可为null
    
                var m2 = type.GetMethod("M2", new Type[] { typeof(string) });//获取public static void M2(string name)
                var val2 = m2.Invoke(null, new object[] { "str" });//运行m2
    
                var m3 = type.GetMethod("M2", new Type[] { typeof(string), typeof(int) });//获取public static void M2(string name, int age)
                var val3 = m3.Invoke(null, new object[] { "str", 124 });//运行m3
    
                //非静态函数的获取及调用
                var m4 = type.GetMethod("M3");
                var val4 = m4.Invoke(C1, null);
                val4 = m4.Invoke(C2, null);
                val4 = m4.Invoke(C3, null);
    
                var m5 = type.GetMethod("M4", new Type[] { typeof(string) });
                var val5 = m5.Invoke(C1, new object[] { "dtr" });
                val5 = m5.Invoke(C2, new object[] { "dtr" });
                val5 = m5.Invoke(C3, new object[] { "dtr" });
    
                var m6 = type.GetMethod("M4", new Type[] { typeof(int) });
                var val6 = m6.Invoke(C1, new object[] { 225 });
                val6 = m6.Invoke(C2, new object[] { 225 });
                val6 = m6.Invoke(C3, new object[] { 225 });
            }
    View Code
  • 相关阅读:
    一篇进入ABB机器人世界-以前学习视频的笔记
    说说常用算子select_shape的特性一些使用
    简单说说双目立体视觉的原理(后面有机会再讲讲应用)
    Halcon算子大全目录
    【转载】C# SQLite 数据库操作
    【重磅】机器视觉前沿的研究机构(国内篇)
    【重磅】机器视觉前沿的研究机构(国外篇)
    机器视觉相关中英文词汇
    Java中print、printf、println的区别
    iTerm2相关设置与美化
  • 原文地址:https://www.cnblogs.com/-hwh/p/13402531.html
Copyright © 2020-2023  润新知