以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 咨询一个函数写法 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=46803) |
-- 作者:jianjingmaoyi -- 发布时间:2014/2/27 19:40:00 -- 咨询一个函数写法 我在内部函数这样写了一段代码: Dim DllName As String ="测试dll.dll" Dim Name As String ="测试dll" Dim Typename As String = "AfterOpenProject" Dim methodname As String = "AfterOpenProject" Dim ParamArray0() As Object = Nothing Dim assembly0 As system.reflection.assembly = system.reflection.assembly.loadfrom(ProjectPath & DllName) Dim method As System.Reflection.MethodInfo = assembly0.Gettype(Name & "." & Typename).GetMethod(methodname) Dim obj2 As object Try obj2 = method.Invoke(Nothing, New Object() { ParamArray0 }) Catch exception1 As Exception Dim exception As Exception = exception1 MessageBox.Show(("调用DLL执行出错,错误信息:" & exception.InnerException.ToString), "警告", MessageBoxButtons.OK, MessageBoxIcon.Hand) goto Label_Error End Try Return obj2 Label_Error: Return Nothing 执行函数为: Functions.Execute("ABC","测试dll.dll","AfterOpenProject","AfterOpenProject",New Object() { "生产管理系统" }) 执行没有任何问题 但是我这样改后: Dim Typename As String = Args(0) Dim methodname As String = Args(1) Dim ParamArray0() As Object = Nothing Dim assembly0 As system.reflection.assembly = system.reflection.assembly.loadfrom(ProjectPath & "测试dll.dll") Dim method As System.Reflection.MethodInfo = assembly0.Gettype("测试dll" & "." & Typename).GetMethod(methodname) Dim obj2 As object Try obj2 = method.Invoke(Nothing, New Object() { ParamArray0 }) Catch exception1 As Exception Dim exception As Exception = exception1 MessageBox.Show(("调用DLL执行出错,错误信息:" & exception.InnerException.ToString), "警告", MessageBoxButtons.OK, MessageBoxIcon.Hand) goto Label_Error End Try Return obj2 Label_Error: Return Nothing 函数应该一样,但是执行后提示找不到实例了
|
-- 作者:逛逛 -- 发布时间:2014/2/27 19:58:00 -- 你的参数量和传入数为什么是不一样的啊? |
-- 作者:逛逛 -- 发布时间:2014/2/27 20:05:00 -- Dim obj As object = Functions.Execute("ABC","AfterOpenProject","AfterOpenProject")
还得判断空
猜的 [此贴子已经被作者于2014-2-27 20:06:17编辑过]
|
-- 作者:jianjingmaoyi -- 发布时间:2014/2/27 20:24:00 -- 我修改了函数是可以执行,但是现在是写在dll的不能执行 |
-- 作者:jianjingmaoyi -- 发布时间:2014/2/27 20:33:00 -- 我把函数改成这样是可以执行了: Dim ParamArray0() As Object = Nothing Dim assembly0 As system.reflection.assembly = system.reflection.assembly.loadfrom(ProjectPath & "测试dll.dll") Dim method As System.Reflection.MethodInfo = assembly0.Gettype("测试dll" & "." & Args(0)).GetMethod(Args(1)) Dim obj2 As object Try obj2 = method.Invoke(Nothing, New Object() { ParamArray0 }) Catch exception1 As Exception Dim exception As Exception = exception1 MessageBox.Show(("调用DLL执行出错,错误信息:" & exception.InnerException.ToString), "警告", MessageBoxButtons.OK, MessageBoxIcon.Hand) goto Label_Error End Try Return obj2 Label_Error: Return Nothing 执行函数为: Functions.Execute("ABC","AfterOpenProject","AfterOpenProject",New Object() { "生产管理系统" }) 但是改成另外一个就又不行了.方法一样 |
-- 作者:有点甜 -- 发布时间:2014/2/27 21:32:00 -- 我感觉是LoadFrom的问题 |
-- 作者:jianjingmaoyi -- 发布时间:2014/2/27 21:53:00 -- 不应该呀 问题是已经成功,只是另外一个不成功了. |
-- 作者:逛逛 -- 发布时间:2014/2/28 11:33:00 -- 试一下这样,参数自己改
Dim filePath As String = Args(0) \'文件路径 If FileSys.FileExists(filePath ) = False Then Dim fileName As String = system.io.Path.GetFileNameWithoutExtension(filePath) \'取文件名
调用
Dim str As String = "E:\\shishi\\测试.dll" |