动态调用DLL的问题!

boboplayer 2006-05-09 04:26:09
数据库字段如下
F_vchManuText F_vchClassName F_vchClassDetail F_vchClassPar
业务处理 getTest.dll getTest.getTest show:lgparam,mdiparent,1

字段说明:F_vchManuText功能模块名; F_vchClassName所对应的DLL名;F_vchClassDetail命名空间及类;F_vchClassPar 方法名及对应参数

getTest.dll 的接口方法如下:
public void show(NetDataCommon.LoginParam lgParam,System.Windows.Forms.Form mdiparent,int intType)
参数说明:NetDataCommon.LoginParam lgParam 是我用户登录信息类
System.Windows.Forms.Form mdiparent 当前MDI窗体
int intType 类别参数

请教各位在程序里通过记录集,动态调用getTest.dll该怎么调用啊,请指点一二啊!!
...全文
204 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
boboplayer 2006-05-10
  • 打赏
  • 举报
回复
问题已解决就是,ClsParam参数没有进行转换
boboplayer 2006-05-09
  • 打赏
  • 举报
回复
我的方法不知道错在那里,郁闷ing
System.Reflection.Assembly ClassName; //组件名称
System.Type ClassType; //利用类型的命名空间和名称获得类型
Object Obj; //实例化类型,或得对象
System.Reflection.MethodInfo ClsMeth; //类型中方法
Object[] ClsParam=null; //参数
string[] TempParam; //临时参数
string MethName; //方法名称
string DllFilePath; //DLL路经
string strSql; //SQL语句
int i;

strSql="select F_nId,F_vchClassName,F_vchClassDetail,F_vchClassPar from YT_MENU where F_nId="+ModuleID;

DataSet ds=new DataSet();
ds=NetDataCommon.SqlHelper.ExecuteDataset(lgParam.StrDbconn,CommandType.Text,strSql);

if(ds.Tables[0].Rows.Count>0)
{
DllFilePath=Application.StartupPath.ToString()+"\\"+ds.Tables[0].Rows[0][1].ToString();
ClassName=Assembly.LoadFile(DllFilePath);
ClassType=ClassName.GetType(ds.Tables[0].Rows[0][2].ToString(),false,true); //加载组件模块
Obj=System.Activator.CreateInstance(ClassType);
MethName=ds.Tables[0].Rows[0][3].ToString().Substring(0,4);
TempParam=ds.Tables[0].Rows[0][3].ToString().Substring(5,ds.Tables[0].Rows[0][3].ToString().Length-5).Split(',');
ClsMeth=ClassType.GetMethod(MethName);

for(i=0;i<TempParam.Length;i++)
{
if(ClsParam==null)
{
ClsParam=new object[1];
}
else
{
ClsParam=new object[ClsParam.Length+1];
}

switch(TempParam[i].ToString().ToLower())
{
case "lgparam":
ClsParam[ClsParam.Length-1]=lgParam;
case "mdiparent":
ClsParam[ClsParam.Length-1]=System.Windows.Forms.Form.ActiveForm.Name;
default:
ClsParam[ClsParam.Length-1]=TempParam[i];
}
}
ClsMeth.Invoke(Obj,ClsParam);
}

其中lgParam已经实例化好的了
Knight94 2006-05-09
  • 打赏
  • 举报
回复
getTest.dll:是.net类库吗,如果是的话
参看
http://blog.csdn.net/knight94/archive/2006/04/10/657527.aspx
zhgroup 2006-05-09
  • 打赏
  • 举报
回复
用反射依次创建所需的参数,然后创建欲执行的对象,再在该对象上执行欲调用的方法等。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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