`
net_liu
  • 浏览: 228318 次
  • 性别: 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#中动态加载和卸载DLL

    C#也提供了实现动态卸载DLL的方法,通过AppDomain来实现。AppDomain是一个独立执行应用程序的环境,当AppDomain被卸载的时候,在该环境中的所有资源也将被回收。

    .NET 动态加载DLL文件

    目前对于 Assembly, CLR 没有提供卸载 Assembly 的方法。而 Assembly 是 驻留在 Appdomain 中,Appdomain 是可以动态卸载和创建的。

    C#动态加载组件后如何在开发环境中调试详解

    那就是简单的Assembly.Load动态加载dll而以。这网上资料也有不少。基本的思路基本上就是在本地上一个指定目录如【plugs】存在着一堆dll文件。主程序在初始运行时一般会把指定目录下的dll一次性用Assembly.Load加载...

    'CefSharp.Core.dll' 找不到指定的模块。

    解决:xp,win7等Could not load file or assembly 'CefSharp.Core.dll' or one of its dependencies. 找不到指定的模块,解决方法 1.安装 VC++运行环境 2.解压win32, 需要将 msvcp120.dll msvcr120.dll 拷贝至C:\...

    将DLL嵌入到EXE大众

    将dll动态库嵌入到exe当中,无需嵌入互操作类型 1、双击Resources.resx 2、添加现有文件 3、添加代码 public Form1() { //添加程序解析失败事件 AppDomain.CurrentDomain.AssemblyResolve += new ...

    官方Kinect10.dll

    异常:已引发: "无法加载 DLL“Kinect10.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。" (System.DllNotFoundException) 引发了一个 System.DllNotFoundException: "无法加载 DLL“Kinect10.dll”: 找...

    LoadDll:带有 GUI 的更好版本的 RunDll。 该程序允许您在 Windows 上加载 DLL。 您可以选择加载 DLL 的方式。 通过直接入口点调用 (DllMain) 或者如果您想直接调用 DLL 的导出函数

    加载DLL 带有 GUI 的更好版本的 RunDll。 该程序允许您在 Windows 上加载 DLL。 您可以选择加载 DLL 的方式。 通过直接入口点调用 (DllMain) 或者如果您想直接调用 DLL 的导出函数。支持的调用约定现在我支持 ...

    遍历DLL所有类

    遍历Dll文件里面的所有类,改为VS2010作业了.原理都是一样的,可以先添加引用或者直接Assembly.LoadFile(assemblyName);引用的话,直接类名即可,LOAD的话要完整的路径,供参考,有问题发信息或者邮件给我.

    NoAmci:使用DInvoke修补AMSI.dll,以绕过通过Assembly.Load()加载.NET tradecraft时触发的AMSI检测。

    一个PoC,用于使用DInvoke修补AMSI.dll,以绕过通过Assembly.Load()加载.NET tradecraft时触发的AMSI检测。可以压缩.Net tradecraft进行编码,编码(如果需要,可以加密),以使程序集大小小于1MB,然后将其嵌入为...

    通过XML+反射技术来配置用户操作软件系统的目录权限

    最近公司的项目要用到相关的技术,网上搜集了一点资料后发现,只能是通过反射技术来实现,即通过加载动态DLL后,利用对方的Assembly来返回此类型的一个对象并激活。具体看我的源码,如有问题,请留言或评论。

    c#UrlRewriter伪静态(UrlRewriter.dll和Intelligencia.UrlRewriter.dll)

    2)、在aspx网页的代码中加<%@ Register TagPrefix="RW" Namespace="ActionlessForm" Assembly="ActionlessForm" %>(加载Page命令后面一行吧) 3)、然后将form标签改为RW:Form(注意开始和结束都要改),...

    研华PCI1760 1761板卡Automation.BDaq.dll

    IO板卡集成dll文件,亲测可用,添加项目引用即可,好用

    StyleCop 4.7 StyleCop.dll

    “未能从程序集 C:\Program Files (x86)\MSBuild\..\StyleCop 4.7\StyleCop.dll 加载任务“StyleCopTask”。 Could not load file or assembly 'file:///C:\Program Files (x86)\StyleCop 4.7\StyleCop.dll' or one ...

    Could not load file or assembly App_Licenses.dll的问题

    今天在AspDotNetStorefront做定制化开发,编译的时候莫名其妙地报告Could not load file or assembly ‘App_Licenses, Version=0.0.0.0, Culture=neutral, … (Exception from HRESULT: 0x80070057 (E_INVALIDARG))...

    C#使用反射(Reflect)获取dll文件中的类型并调用方法

    使用反射(Reflect)获取dll文件中的类型并调用方法,具体内容如下 需引用:System.Reflection; 1. 使用反射(Reflect)获取dll文件中的类型并... //加载dll文件 Assembly asm = Assembly.LoadFile(path); /

    C# 动态加载程序集信息

    在设计模式的策略模式中,需要动态加载程序集信息,本文通过一个简单的实例,来讲解动态加载Dll需要的知识点。 涉及知识点: AssemblyName类,完整描述程序集的唯一标识, 用来表述一个程序集。 Assembly类,在...

    shinkai:游戏Subnautica的多人游戏模组。 C#视窗

    在DNSpy中打开Assembly-CSharp.dll CSharp.dll。 导航到GameInput > Awake 。 右键单击源,然后选择“ Edit Method (C#)... 。 在“编辑代码”窗口中,按Ctrl+O或文件夹图标以Add Assembly Reference 。 添加对...

    如何用C#动态编译、执行代码

    如何用C#动态编译、执行代码 在开始之前,先熟悉几个类及部分属性、方法:CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。 一、CSharpCodeProvider 提供对C#代码生成器和代码...

    WPFMediaKit.dll 、DirectShowLib-2005.dll相关文件

    下载“WPFMediaKit.dll”程序开发包,用在项目中添加引用; 在WPF窗口引入并命名: xmlns:wpfMedia="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit" 在界面用到一个VideoCaptureElement的控件...

    DevExpress 13.1.8 破解(完全破解可发布)

    DevExpress 13.1.8 真正的完全破解,可发布。 使用方法: ...3、如果编译程序时提示“lc.exe 已退出 代码为 -1”时,则删除程序中原有的DevExpress dll引用,重新添加一下程序中的DevExpress dll引用即可。

Global site tag (gtag.js) - Google Analytics