`
net_liu
  • 浏览: 233134 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过Assembly来动态加载DLL

 
阅读更多
  通过Assembly来动态加载DLL
      //从DLL文件加载程序集
        static Assembly amy = Assembly.LoadFrom("Student.dll");

        //创建新类
        static Type type = amy.GetType("Student.Stu");
        private void button1_Click(object sender, EventArgs e)
        {
            //静态成员
            string strDyNamic= (string)type.InvokeMember("GetNewValue",
                BindingFlags.DeclaredOnly |
                BindingFlags.Public | BindingFlags.Static |
                BindingFlags.InvokeMethod, null, null, 
                new object[] {"Static"});
            MessageBox.Show(strDyNamic);

            //非静态成员
            object obj = type.InvokeMember(null,BindingFlags.DeclaredOnly|
                BindingFlags.Public|BindingFlags.NonPublic|
                BindingFlags.Instance|BindingFlags.CreateInstance,
                null,null,null);

            string strStatic = (string)type.InvokeMember("GetValue",
                BindingFlags.DeclaredOnly|
                BindingFlags.Public|BindingFlags.NonPublic|
                BindingFlags.Instance|BindingFlags.InvokeMethod,
                null,obj,new object[]{"NonStatic"});
            MessageBox.Show(strStatic);

            //设置类的属性
            type.InvokeMember("Name",BindingFlags.DeclaredOnly|
                BindingFlags.Public |BindingFlags.NonPublic|
                BindingFlags.Instance|BindingFlags.SetProperty,
                null,obj,new object[]{"Test"});

            //获取类的属性
            string property = (string)type.InvokeMember("Name",BindingFlags.DeclaredOnly|
                BindingFlags.Public|BindingFlags.NonPublic|
                BindingFlags.Instance|BindingFlags.GetProperty,
                null,obj,null);
            MessageBox.Show(property);
        }

 DLL代码大致如下

namespace Student
{
    public class Stu
    {
       
        public Stu()
        {
            strName = "";
        }
        public string GetValue(string strText)
        {
            return string.Format("Print NonStatic {0}!", strText);
        }
        public static string GetNewValue(string strText)
        {
            return string.Format("Print static {0}!", strText);
        }
        private string strName;
        public string Name
        {
            get { return strName; }
            set { strName = value; }
        }
    }
}

 

分享到:
评论

相关推荐

    C# WinForm动态加载DLL通过配置文件

    本知识点将深入探讨如何在C# WinForm应用中通过配置文件来实现DLL的动态加载。 首先,我们需要理解配置文件的作用。配置文件(如app.config或web.config)用于存储应用程序的设置,如数据库连接字符串、服务端口等...

    C# WinForm 动态加载DLL 通过配置文件

    总结来说,C# WinForm通过配置文件动态加载DLL的关键步骤包括:读取配置文件中的DLL路径,使用`Assembly.LoadFrom`加载DLL,通过反射获取并实例化DLL中的类,最后调用类的方法执行功能。这种方法提高了代码的可维护...

    动态加载dll,动态加载webservice

    在.NET框架中,我们通常使用`System.Reflection`命名空间中的`Assembly.Load`方法来实现DLL的动态加载。以下是一个简单的示例: ```csharp using System; using System.Reflection; public class Program { ...

    C#中动态加载和卸载DLL

    在C#中实现动态加载DLL,我们可以使用`Assembly.LoadFile`方法,它允许在运行时加载指定路径的DLL。然而,如果需要卸载这个DLL,就不能简单地使用类似FreeLibrary的函数,因为C#没有提供直接卸载Assembly的API。相反...

    C#动态加载DLL主要说明如何通过反射实现动态加载DLL

    本文将详细介绍如何通过反射来实现C#动态加载DLL。 反射是一种强大的特性,允许程序在运行时检查自身并执行元数据中的操作。它能让我们在运行时发现类型、创建对象实例、调用方法、访问属性等。在C#中,`System....

    动态加载DLL界面方法

    在C#中,我们可以使用`System.Reflection`命名空间中的`Assembly`类来实现动态加载DLL。以下是一些关键步骤: 1. **加载DLL**:使用`Assembly.LoadFrom`或`Assembly.LoadFile`方法加载DLL文件。例如: ```csharp ...

    .NET 动态加载DLL文件

    总结一下,`.NET 动态加载DLL文件`是通过`Assembly`类和`AppDomain`实现的,提供了程序在运行时按需加载库的能力,而通过卸载`AppDomain`可以间接地“卸载”DLL。这种技术在插件系统、模块化应用或需要动态扩展功能...

    C#动态加载DLL_C#_dll_

    在.NET框架中,C#语言提供了强大的能力来处理运行时的动态操作,其中包括动态加载DLL。这是一项关键技能,尤其当需要在不重新编译应用程序的情况下添加或更新功能时。本篇文章将深入探讨如何在C#中实现动态加载DLL...

    C#中加载和卸载DLL

    而在C#中,虽然可以通过`Assembly.LoadFile`方法来动态加载DLL,但是在卸载DLL方面却没有直接对应的方法,这是因为C#采用了垃圾回收机制。 #### 二、C#中的DLL加载与卸载 ##### 2.1 动态加载DLL 在C#中,可以使用`...

    利用反射,动态加载DLL,卸载DLL

    动态加载DLL主要通过`Assembly`类实现。`Assembly.LoadFrom`方法是关键,它接受DLL文件的路径作为参数,然后在运行时加载该DLL。例如: ```csharp Assembly dllAssembly = Assembly.LoadFrom("Path_to_DLL.dll"); `...

    利用反射动态加载dll

    4. **查找类型和成员**:一旦DLL加载,我们可以使用`Assembly.GetTypes`获取所有类型,或者通过`Type.GetType`按名称查找特定类型。同样,我们可以使用`Type.GetMethods`、`Type.GetProperties`等方法来获取类型的...

    c# winform 框架菜单动态加载dll组件

    C#中,我们可以通过`Assembly`类和`Reflection`机制来实现动态加载DLL。`Assembly.Load`方法用于加载指定路径的DLL文件,然后通过反射获取并实例化DLL中的类型和方法。 3. **反射机制**: 反射是.NET框架的一个...

    C# 反射实例代码 接口方式动态加载dll方式

    本文将深入探讨如何通过接口方式动态加载DLL,以此来理解C#反射的应用。 首先,我们要知道什么是接口。在C#中,接口(Interface)是一种定义行为规范的类型,它不包含任何实现,只包含方法、属性、索引器和事件的...

    DLL的动态加载

    在C#中,我们主要通过以下方法进行DLL动态加载: 1. **System.Reflection.Assembly** 类:这是C#中用于处理程序集(包括DLL)的核心类。通过`Assembly.Load`方法,我们可以加载指定路径的DLL文件。例如: ```...

    bartender 10.0 C#动态调用DLL

    在.NET框架下,C#可以使用`System.Reflection`命名空间的类,如`Assembly`和`Type`,来动态加载和调用DLL中的方法。这种方法允许程序在运行时决定要执行哪个特定的DLL功能,增强了代码的灵活性。 1. **加载DLL**:...

    C#动态调用DLL并对目标函数传递参数

    在.NET框架中,C#语言提供了强大的类型安全和编译时检查,但有时我们需要在运行时动态地加载和调用DLL中的函数,这种情况通常涉及到“反射”这一核心特性。本篇将深入探讨如何使用C#进行动态DLL调用以及如何向目标...

    c++动态加载c#编写生成的dll代码

    本主题探讨的是如何在C++程序中动态加载并使用由C#编写的DLL(动态链接库)代码。这涉及到.NET Framework和C++之间的互操作性,也称为CLI(Common Language Infrastructure)或P/Invoke(Platform Invoke)。 C#...

    DotNet平台DLL动态加载示例

    DLL动态加载是指程序在运行时通过API调用来加载和卸载DLL,而不是在编译时将其链接到可执行文件中。这样可以减少程序的大小,提高资源利用率,并允许不同应用程序共享同一DLL。 2. **C#中的DllImportAttribute** ...

    C#程序实现动态调用DLL的实例

    在C#中,我们通常使用`DllImport`特性来静态加载DLL,但有时我们可能需要在运行时动态地加载和调用DLL中的方法,这时就需要使用到`Assembly`类和`Type`类。 动态加载DLL的基本步骤如下: 1. 加载DLL:通过`...

Global site tag (gtag.js) - Google Analytics