我使用Assembly动态加载dll,方法如下(从网上查的方法):
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
string DllPath = Application.StartupPath + @"\someDLL.dll";
System.Reflection.Assembly assmble = System.Reflection.Assembly.LoadFile(DllPath);
Type tmpType = assmble.GetType("someDLL.ClassA");
System.Reflection.MethodInfo tmpM = tmpType.GetMethod("Add");
object tmpobj = assmble.CreateInstance("someDLL.ClassA");
int i = (int)tmpM.Invoke(tmpobj, new object[]{2,3});
----------ClassA的定义--------------------
using System; namespace someDLL
{
/// <summary>
/// ClassA 的摘要说明。
/// </summary>
public class ClassA
{
public ClassA()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public int Add(int a, int b)
{
return a+b;
}
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\现在的问题是:如果类库中的函数有ref型返回值参数,应该怎么做?
多谢各位大侠了!!
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
string DllPath = Application.StartupPath + @"\someDLL.dll";
System.Reflection.Assembly assmble = System.Reflection.Assembly.LoadFile(DllPath);
Type tmpType = assmble.GetType("someDLL.ClassA");
System.Reflection.MethodInfo tmpM = tmpType.GetMethod("Add");
object tmpobj = assmble.CreateInstance("someDLL.ClassA");
int i = (int)tmpM.Invoke(tmpobj, new object[]{2,3});
----------ClassA的定义--------------------
using System; namespace someDLL
{
/// <summary>
/// ClassA 的摘要说明。
/// </summary>
public class ClassA
{
public ClassA()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public int Add(int a, int b)
{
return a+b;
}
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\现在的问题是:如果类库中的函数有ref型返回值参数,应该怎么做?
多谢各位大侠了!!
解决方案 »
- C# form中矢量图形绘制,如何让其可以调整在窗体上的Z顺序,例如不被按钮等控件遮住等
- 验证码问题
- 我现在写了个WINDOWS服务, 里面没2分钟执行一次, 现在我还有几个服务是半个小时,一个小时执行一次的,我可以把这些服务写在一个服务里面吗,还是用把方法写在一个服务里面
- Web用户控件
- 关于数据类型转换的问题!
- 关于网站发布的问题。急!!!!
- access怎么早局域网中当数据库让其他机器访问
- C#中的系统设置是不是用ini文件和Alt+Enter 的快捷健的设置
- 求教存储过程的问题,在线等!
- 【请教】【线程池】线程判断?????
- 怎么看.Net类库中类中成员方法的具体代码?
- rdlc报表如何实现来源多datable与多个子表格
{
Type t = typeof(A);
MethodInfo mi = t.GetMethod("AMethod", new Type[] { Type.GetType("System.Int32&") });
if (mi != null)
{
object o = Activator.CreateInstance(t);
int i = 0;
mi.Invoke(o, new object[] { i });
}
} class A
{
public A()
{
} public void AMethod(ref int i)
{
i = 10;
Console.WriteLine(i);
}
}
把你带ref参数的方法贴出来看看
mi.Invoke(o, vars);
int i = (int)vars[0];
我是这样用的:
(1).在一个类库函数中定义函数: using System; namespace someDLL
{
/// <summary>
/// ClassA 的摘要说明。
/// </summary>
public class ClassA
{
public ClassA()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public int Add(ref int xx)
{
xx=12;
return 9;
}
}
} (2).然后将dll放在一个界面程序的根目录中,界面程序不引用这个dll文件,而是动态添加: string DllPath = Application.StartupPath + @"\someDLL.dll";
System.Reflection.Assembly assmble = System.Reflection.Assembly.LoadFile(DllPath);
Type tmpType = assmble.GetType("someDLL.ClassA");
object tmpobj = assmble.CreateInstance("someDLL.ClassA");
System.Reflection.MethodInfo tmpM = tmpType.GetMethod("Add",new Type[] {Type.GetType("System.Int32&") ); //在这里修改了
int bb=0; int i = (int)tmpM.Invoke(tmpobj, new object[]{bb}); 但是执行完后,变量bb还是0.
P.S.一会儿就给二位大哥放分,多谢帮忙!!
Type.GetType("System.Int32[]&")