如何动态调用类库中的某个类的某个方法
类库libtest.dll
形如
namespace nstest
public class clstest
public sub subtest()
......
end sub
end class
end namespace
如何在代码中非引用的动态生成clstest并调用subtest,如果clstest是一个窗体,又如何调用,谢谢。
问题点数:50、回复次数:10Top
1 楼intern9901()回复于 2006-03-06 15:24:26 得分 0
装载程序集后用反射Top
2 楼subzero(赘姆烂壳)回复于 2006-03-06 15:39:58 得分 0
谢谢回答,请详细用代码说明,谢谢。Top
3 楼naturalth(自我批判,是思想、品德、素质、技能创新的优良工具)回复于 2006-03-06 17:19:56 得分 10
Dim asb As [Assembly] = [Assembly].GetExecutingAssembly
Dim tForm As Type = asb.GetType("nstest." & Me.clstest)
Dim frm As Form = Activator.CreateInstance(tForm)
frm.ShowDialog()
这些可以查msdn呀Top
4 楼subzero(赘姆烂壳)回复于 2006-03-06 18:09:03 得分 0
你理解错了,libtest是一个编译好的类库dll
我需要在其他的应用中动态调用这个dllTop
5 楼Cnapollo(旁痞)回复于 2006-03-06 19:00:12 得分 40
VB不熟,给你C#语法的
Assembly ass=Assembly.LoadFrom(@"c1.dll");//类库所在文件名
object oo=ass.CreateInstance("C1.Class2");//建立指定全名(带名空间)的类
Type mytype=oo.GetType();
MethodInfo mi=mytype.GetMethod("f");//指定方法名
//Console.WriteLine(mi.Name);
mi.Invoke(oo,null); //如方法有参数可将null换成object[]的参数
如果是窗口, Form form1=(Form)oo;
form1.show();
Top
6 楼intern9901()回复于 2006-03-07 09:14:01 得分 0
Cnapollo(旁痞)正解Top
7 楼subzero(赘姆烂壳)回复于 2006-03-07 14:03:12 得分 0
我在msdn中查到的也是这样,不过在我的vb.net中就是调不通
给oo赋值后,oo是nothing,为什么啊???Top
8 楼subzero(赘姆烂壳)回复于 2006-03-07 14:06:14 得分 0
这是类库
Namespace namespacetest
Public Class classtest
Public Sub New()
End Sub
Public Sub subtest()
End Sub
End Class
End Namespace
这是调用部分
Dim asm As System.Reflection.Assembly
asm = System.Reflection.Assembly.LoadFrom("libtest.dll")
Dim o As Object = asm.CreateInstance("namespacetest.classtest")
MessageBox.Show(o.GetType().FullName)
o是nothingTop
9 楼subzero(赘姆烂壳)回复于 2006-03-07 16:42:39 得分 0
自己解决了。。Top
10 楼815815(比尔.net.xp)回复于 2006-05-20 15:30:22 得分 0
楼上能不能给出完整的代码,偶照上面去做老是提示未将对象引用到实例,郁闷....Top




