架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 58236|回复: 2

[资料] c#动态加载dll插件并执行

[复制链接]
发表于 2016-10-10 14:30:19 | 显示全部楼层 |阅读模式
QQ截图20161010142404.jpg

先写一个接口,来约定一下,如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace LibraryApi
  6. {
  7.     /// <summary>
  8.     /// 插件api
  9.     /// </summary>
  10.     public interface openapi
  11.     {
  12.         /// <summary>
  13.         /// 名称
  14.         /// </summary>
  15.         string Name { get; }

  16.         /// <summary>
  17.         /// 作者
  18.         /// </summary>
  19.         string Auth { get; }

  20.         /// <summary>
  21.         /// 网址
  22.         /// </summary>
  23.         string Url { get; }

  24.         /// <summary>
  25.         /// 解密
  26.         /// </summary>
  27.         /// <param name="md5">MD5</param>
  28.         /// <returns></returns>
  29.         string Decryption(string md5);
  30.     }
  31. }
复制代码


然后继承接口,并实现,代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Web.Script.Serialization;

  6. namespace cmd5.com
  7. {
  8.     public class Decrytion : LibraryApi.openapi
  9.     {
  10.         public string Name
  11.         {
  12.             get { return "wmd5解密插件v1.0"; }
  13.         }

  14.         public string Auth
  15.         {
  16.             get { return "小渣渣"; }
  17.         }

  18.         public string Url
  19.         {
  20.             get { return "http://www.wmd5.com/"; }
  21.         }

  22.         public string Decryption(string md5)
  23.         {
  24.             return "123";
  25.         }
  26.     }
  27. }
复制代码
最后动态装载dll插件,并且执行:

  1. /// <summary>
  2.         /// 装载dll插件
  3.         /// </summary>
  4.         /// <param name="file"></param>
  5.         /// <returns></returns>
  6.         private bool LoadPlugin(string file)
  7.         {
  8.             Assembly dll = Assembly.LoadFile(file);
  9.             foreach (var _every in dll.GetTypes())
  10.             {
  11.                 if (_every.GetInterface(typeof(LibraryApi.openapi).Name) != null)
  12.                 {
  13.                     LibraryApi.openapi api = System.Activator.CreateInstance(_every) as LibraryApi.openapi;
  14.                     
  15.                     return true;
  16.                 }
  17.             }
  18.             return false;
  19.         }
复制代码






上一篇:C#中如何判断实例是否继承了某个父类或者实现了某类接口
下一篇:c# 字符串md5加密成16位和32位
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-9-18 19:08:27 | 显示全部楼层
来看看学习一下
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-9-18 19:10:16 | 显示全部楼层
是不是只能加载c#的dll。  c++的不行
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-10-16 19:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表