VS2005反射问题

vbagcl 2010-02-23 07:06:20
一个解决方案中两个简单的项目,一个是windows应用程序,一个是dll。
在dll项目中包括两个类。在windows项目中利用反射调用dll项目中其中一个类的函数。代码如下:
1、windows项目中的代码:
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim PKG_Class As Object = Activator.CreateInstance(Type.GetType("PKGQCM.PKG_AQA0100C")) '
Dim Parameters() As Object = {"Para_str"}
Dim mtype As Type = PKG_Class.GetType()
Dim minfo As System.Reflection.MethodInfo = mtype.GetMethod("P_SMODIFY")
Dim Gf_Sp_Process As Boolean
Gf_Sp_Process = minfo.Invoke(PKG_Class, Parameters)
End Sub
End Class

2、dll项目中的代码如下(注:dll项目名称是PKGQCM):
Public Class PKG_AQA0100C
Public Function P_SMODIFY(ByVal Pro_str As String) As Boolean
Pro_str = "ITYPE," + Pro_str
Return True
End Function
End Class

调用时,提示错误:值不能为空。参数名:type

3、为验证调用的正确性,我在dll项目中增加一个类,代码如下:
Public Class CALL_PKG
Public Sub CA_PK()
Dim MTYPE As Type = Type.GetType("PKGQCM.xx.PKG_AQA0100C")
Dim PKG_Class As Object = Activator.CreateInstance(Type.GetType("PKGQCM.PKG_AQA0100C"))
End Sub
End Class
执行结果正确,请高手指点,多谢!


...全文
140 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbagcl 2010-02-23
  • 打赏
  • 举报
回复
谢谢xingyuebuyu指点,搞定,结贴啦。
为保证有人顶帖,顶帖者有分。
xingyuebuyu 2010-02-23
  • 打赏
  • 举报
回复
Imports System.Reflection
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
''将这里的路径改为你要反射的DLL的路径
Dim asm As Assembly = Assembly.LoadFrom("C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll")
''typename改为你需要的名称
Dim obj As Object = asm.CreateInstance("System.Data.DataSet")
End Sub
End Class



你在第一步当中的写法是要将DLL添加到项目引用中,然后才能编译成功.


vbagcl 2010-02-23
  • 打赏
  • 举报
回复
谢谢wuyq11回复,我的原代码是VB,我不太明白你的回复:
Class1 test = new Class1();
好像Class1是已知的类,而反射的思想事先是不知道类名称的。
多谢你再说详细些好吗?
wuyq11 2010-02-23
  • 打赏
  • 举报
回复
Class1 test = new Class1();
Type t = test.GetType();

MethodInfo[] test_method = t.GetMethods();
string[] s = { "B" };
MethodInfo method= t.GetMethod("");
object obj_name = Activator.CreateInstance(t, s);
method.Invoke(obj_name, null);

MethodInfo methodInfo = t.GetMethod("", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
methodInfo.Invoke(target, null);

16,557

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧