一、
比如我事先写了一个类,如下:
Public?Class?TestClass
Public?Function?Add(ByVal?add1?As?Integer,?ByVal?add2?As?Integer)?As?Integer
Return?add1?+?add2
End?Function
End?Class
然后编译成了ClassDll.dll文件.
二、
在另一个程序中,我写入了如下代码
Public?Function?Add(ByVal?add1?As?Integer,?ByVal?add2?As?Integer)?As?Integer
Dim?asm?As?System.Reflection.Assembly?=?System.Reflection.Assembly.LoadFile("ClassDll.dll")
Dim?classtemp?As?Type?=?asm.GetType("ClassDll.TestClass")
Dim?obj?As?Object?=?asm.CreateInstance(classtemp.FullName)
Dim?me_Info?As?System.Reflection.MethodInfo?=?classtemp.GetMethod("Add")
Dim?paramter(1)?As?Object
paramter(0)?=?add1
paramter(1)?=?add2
Return?me_Info.Invoke(obj,?paramter)
End?Function
执行上面的Add函数其功能和执行一中的Add函数是一样的。
当然,执行上面的函数的另一种方法是:(之前我用上面的方法反射执行一个exe文件里的函数时,总是失败,但是按照下面的方法就可以成功执行,你要是遇到问题时,不妨按照下面的方法试一试)
Public?Function?Add(ByVal?add1?As?Integer,?ByVal?add2?As?Integer)?As?Integer
Dim?asm?As?System.Reflection.Assembly?=?System.Reflection.Assembly.LoadFile("ClassDll.dll")
Dim?classtemp?As?Type?=?asm.GetType("ClassDll.TestClass")
Dim?obj?As?Object?=?asm.CreateInstance(classtemp.FullName)
Return?CallByName(obj,?"Add",?vbMethod,add1,add2)'这里特别注意CallByName的用法
End?Function
1、上面的?System.Reflection.Assembly.LoadFile("ClassDll.dll")这一句里的ClassDll.dll是我们编译的那个dll文件。如果其不是放在程序目录下,这里必须换成ClassDll.dll的绝对路径。
2、Dim?classtemp?As?Type?=?asm.GetType("ClassDll.TestClass")这里的ClassDll.TestClass类为什么不是我们定义的那个TestClass类呢(这一般是工程名加类名构成),你自己打开反射dll文件看一下就知道答案了。即我们用的时候类不是简单我们定义那个类。这里需要注意。还有,类名严格区分大小写。
3、paramter是我们函数要接收的参数。可以通过paramter来传递数据。转载请注明出处:
未经允许不得转载:lxfamn » vb.net 调用dll 一个函数