c# 動態(tài)加載dll文件,并實現(xiàn)調(diào)用其中的方法(推薦)
以下是測試代碼:
新建一個classlibrary,包含兩個類class1和class2,這兩個類中分別有一個方法,都是返回一個字符串,代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace mydll
{
public class Class1
{
public Class1()
{
}
public string sayhello()
{
return "hello,word!";
}
}
public class Class2
{
public Class2()
{
}
public string saybeautiful()
{
return "beautiful,very good!";
}
}
}
在編譯完成后會生成一個mydll.dll動態(tài)鏈接庫,然后新建一個winform項目(其他也可以,調(diào)試用):
private void button1_Click(object sender, EventArgs e)
{
string path = @"D:\123\mydll\mydll\bin\Debug\mydll.dll";
//Byte[] byte1 = System.IO.File.ReadAllBytes(path);//也是可以的
//Assembly assem = Assembly.Load(byte1);
Assembly assem = Assembly.LoadFile(path);
//string t_class = "mydll.Class1";//理論上已經(jīng)加載了dll文件,可以通過命名空間加上類名獲取類的類型,這里應該修改為如下:
//string t_class = "mydll.Class1,mydll";//如果你想要得到的是被本工程內(nèi)部的類,可以“命名空間.父類……類名”;如果是外部的,需要在后面加上“,鏈接庫名”;
//再次感謝thy38的幫助。
//Type ty = Type.GetType(t_class);//這兒在調(diào)試的時候ty=null,一直不理解,望有高人可以解惑
Type[] tys = assem.GetTypes();//只好得到所有的類型名,然后遍歷,通過類型名字來區(qū)別了
foreach (Type ty in tys)//huoquleiming
{
if (ty.Name == "Class1")
{
ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//獲取不帶參數(shù)的構(gòu)造函數(shù)
object magicClassObject = magicConstructor.Invoke(new object[] { });//這里是獲取一個類似于類的實例的東東
//object magicClassObject = Activator.CreateInstance(t);//獲取無參數(shù)的構(gòu)造實例還可以通過這樣
MethodInfo mi = ty.GetMethod("sayhello");
object aa=mi.Invoke(magicClassObject, null);
MessageBox.Show(aa.ToString());//這兒是執(zhí)行類class1的sayhello方法
}
if (ty.Name == "Class2")
{
ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//獲取不帶參數(shù)的構(gòu)造函數(shù),如果有構(gòu)造函數(shù)且沒有不帶參數(shù)的構(gòu)造函數(shù)時,這兒就不能這樣子啦
object magicClassObject = magicConstructor.Invoke(new object[] { });
MethodInfo mi = ty.GetMethod("saybeautiful");
object aa = mi.Invoke(magicClassObject, null);//方法有參數(shù)時,需要把null替換為參數(shù)的集合
MessageBox.Show(aa.ToString());
}
}
//AppDomain pluginDomain = (pluginInstanceContainer[key] as PluginEntity).PluginDomain;
//if (pluginDomain != null)
//{
// AppDomain.Unload(pluginDomain);
// }
}
以上這篇c# 動態(tài)加載dll文件,并實現(xiàn)調(diào)用其中的方法(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持我們。
上一篇:詳解C#用new和override來實現(xiàn)抽象類的重寫區(qū)別
欄 目:C#教程
下一篇:C# Fiddler插件實現(xiàn)網(wǎng)站離線瀏覽功能
本文標題:c# 動態(tài)加載dll文件,并實現(xiàn)調(diào)用其中的方法(推薦)
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5912.html
您可能感興趣的文章
- 01-10C#動態(tài)創(chuàng)建button的方法
- 01-10C#動態(tài)創(chuàng)建Access數(shù)據(jù)庫及密碼的方法
- 01-10C#獲取動態(tài)生成的CheckBox值
- 01-10C#中DataGridView動態(tài)添加行及添加列的方法
- 01-10C++調(diào)用C#的DLL程序?qū)崿F(xiàn)方法
- 01-10C#實現(xiàn)將javascript文件編譯成dll文件的方法
- 01-10輕松學習C#的ArrayList類
- 01-10基于C#實現(xiàn)12306的動態(tài)驗證碼變成靜態(tài)驗證碼的方法
- 01-10C#如何動態(tài)設(shè)置屏幕分辨率
- 01-10C#實現(xiàn)Excel動態(tài)生成PivotTable


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻播放器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當前操作系統(tǒng)已
隨機閱讀
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實例總結(jié)
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什


