资源文件里面添加Dll,然后在程序中使用该Dll
资源文件里面添加Dll,然后在程序中使用该Dll
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; // 对文件的读写需要用到此命名空间
using System.Reflection; // 使用 Assembly 类需用此命名空间
using System.Reflection.Emit; // 使用 ILGenerator 需用此命名空间
namespace DllEmbedResource测试
{
public class TestClass
{
// 记录要导入的程序集
private static Assembly MyAssembly;
private static Type[] _types;
public TestClass()
{
try
{// 判断 MyAssembly 是否为空或 MyAssembly 的命名空间不等于要调用方法的命名空间,如果条件为真,就用 Assembly.Load 加载所需 DLL 作为程序集 i
if (MyAssembly == null || MyAssembly.GetName().Name != "TestDll")
MyAssembly = Assembly.Load(DllEmbedResource测试.Properties.Resources.TestDll);
Type[] type = MyAssembly.GetTypes();
_types =type ;
}
catch
{
}
}
/// <summary>
/// 根据命名空间和类型名获得类型
/// </summary>
/// <param name="_nameSpace"></param>
/// <param name="_className"></param>
/// <returns></returns>
public Type GetType(string _nameSpace,string _className)
{
foreach (Type t in _types)
{
if (t.Namespace == _nameSpace && t.Name == _className)
{
return t;
}
}
return Type.GetType("String");
}
/// <summary>
/// 根据类型和参数创建实例
/// </summary>
/// <param name="_type"></param>
/// <param name="?"></param>
/// <returns></returns>
public object CreateInstance(Type _type,object [] _parameter)
{
return Activator.CreateInstance (_type,_parameter );
}
/// <summary>
///根据类型创建实例
/// </summary>
/// <param name="_type"></param>
/// <returns></returns>
public object CreateInstance(Type _type)
{
return Activator.CreateInstance(_type);
}
/// <summary>
/// 根据实例、类类型、方法名、方法参数获得方法的结果
/// </summary>
/// <param name="_instance"></param>
/// <param name="_type"></param>
/// <param name="_methordName"></param>
/// <param name="_parameter"></param>
/// <returns></returns>
public object GetInstanceMethordResult(object _instance,Type _type,string _methordName,object [] _parameter)
{
MethodInfo displayInfoMethod =_type .GetMethod (_methordName );
return displayInfoMethod .Invoke(_instance ,_parameter);
}
/// <summary>
/// 根据类类型、方法名、方法参数获得静态方法的结果
/// </summary>
/// <param name="_type"></param>
/// <param name="_methordName"></param>
/// <param name="_parameter"></param>
/// <returns></returns>
public object GetStaticMethordResult( Type _type, string _methordName, object[] _parameter)
{
MethodInfo m = _type.GetMethod(_methordName);
if (m != null)
{
object o = Activator.CreateInstance(_type);
return m.Invoke(o,_parameter );
}
else
{
//System.Windows.Forms.MessageBox.Show(" 装载出错 !");
}
return (object)0;
}
/// <summary>
/// 根据实例、类类型、属性、属性值设置实例的属性
/// </summary>
/// <param name="_instance"></param>
/// <param name="_type"></param>
/// <param name="_attribute"></param>
/// <param name="_parameter"></param>
public void SetInstanceAttribute(object _instance,Type _type,string _attribute,object [] _parameter)
{
_type.InvokeMember(_attribute , BindingFlags.SetProperty, null, _instance , _parameter );
}
/// <summary>
/// 根据实例、类类型、属性、获得属性的值
/// </summary>
/// <param name="_instance"></param>
/// <param name="_type"></param>
/// <param name="_attribute"></param>
/// <returns></returns>
public object GetInstanceAttribute(object _instance,Type _type,string _attribute)
{
return _type.InvokeMember(_attribute, BindingFlags.GetProperty, null , _instance, null);
}
/// <summary>
/// 根据实例、类类型、字段、字段值设置实例的字段
/// </summary>
/// <param name="_instance"></param>
/// <param name="_type"></param>
/// <param name="_attribute"></param>
/// <param name="_parameter"></param>
public void SetInstanceField(object _instance,Type _type,string _field,object [] _parameter)
{
_type.InvokeMember(_field , BindingFlags.SetField, null,_instance ,_parameter);
}
/// <summary>
/// 根据实例、类类型、字段、获得字段的值
/// </summary>
/// <param name="_instance"></param>
/// <param name="_type"></param>
/// <param name="_field"></param>
/// <returns></returns>
public object GetInstanceField(object _instance,Type _type,string _field)
{
return _type.InvokeMember(_field, BindingFlags.GetField, null,_instance , null);
}
public object InvokeAttribute(string lpProcName)
{
try
{// 判断 MyAssembly 是否为空或 MyAssembly 的命名空间不等于要调用方法的命名空间,如果条件为真,就用 Assembly.Load 加载所需 DLL 作为程序集 i
if (MyAssembly == null || MyAssembly.GetName().Name != "TestDll")
MyAssembly = Assembly.Load(DllEmbedResource测试.Properties.Resources.TestDll);
Type[] type = MyAssembly.GetTypes();
foreach (Type t in type)
{
if (t.Namespace == "TestDll" && t.Name == "ZhouyzTestDll")
{
PropertyInfo m = t.GetProperty(lpProcName);
if (m != null)
{// 调用并返回
object o = Activator.CreateInstance(t);
return null;
}
else
{
//System.Windows.Forms.MessageBox.Show(" 装载出错 !");
}
}
}
}
catch (System.NullReferenceException e)
{
//System.Windows.Forms.MessageBox.Show(e.Message);
}
return (object)0;
}
}
}
其他资源:http://hi.baidu.com/frankzye/blog/item/347db48b4a873adbfc1f104d.html

浙公网安备 33010602011771号