vb.net 调用dll 一个函数

注意:下面的Dll文件必须是用托管代码写的,否则请使用API的相应函数进行动态加载。

一、

比如我事先写了一个类,如下:

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来传递数据。转载请注明出处:

转载自http://lxfamn.cn/blog

未经允许不得转载:lxfamn » vb.net 调用dll 一个函数

赞 (0) 打赏

置顶推荐

评论 0

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏