反射调用dll提示参数不匹配

nikolaichow 2012-12-11 04:43:34
dll:

using System;
namespace GsApprovalDllSpace
{
public class GsApprovalDll
{
public bool submit(string[] strValue)
{





调用方:

try
{
string dllPath = @"xxx.dll";
//声明一个反射类对象
System.Reflection.Assembly a = System.Reflection.Assembly.LoadFile(dllPath);
//定义一个"类型信息"的对象.
Type t = a.GetType("DllSpaceName.DllClassName");
//定义一个成员信息类对象数组,并从程序集中获取.
MethodInfo method1 = t.GetMethod("submit");
object obj = a.CreateInstance("DllSpaceName.DllClassName");
object[] parts = new object[2];
parts[0] = "bbb";
parts[1] = "aaa";
bool b = (bool)method1.Invoke(obj, parts); ==>在这里报错了,提示参数不匹配。
}
catch (Exception ex)
{

}


请问如何调整?
...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nikolaichow 2012-12-11
  • 打赏
  • 举报
回复
引用 8 楼 wyd1520 的回复:
算了给你完整的答案,要是还弄不明白,谁也帮不了你了。 C# code?1234567891011121314151617181920212223242526272829303132333435363738using System;using System.Collections.Generic;using System.Text; namespace GsApprova……
我重新发帖描述吧,这些都不行。
本拉灯 2012-12-11
  • 打赏
  • 举报
回复
算了给你完整的答案,要是还弄不明白,谁也帮不了你了。


using System;
using System.Collections.Generic;
using System.Text;

namespace GsApprovalDllSpace
{
    public class GsApprovalDll
    {
        public bool submit(string[] strValue)
        {
            return true;
        }
    }
}





try
            {
                string dllPath = Application.StartupPath+"\\xxx.dll";
                //声明一个反射类对象
                System.Reflection.Assembly a = System.Reflection.Assembly.LoadFile(dllPath);
                //定义一个"类型信息"的对象.
                Type t = a.GetType("GsApprovalDllSpace.GsApprovalDll");
                //定义一个成员信息类对象数组,并从程序集中获取.
                MethodInfo method1 = t.GetMethod("submit");
                object obj = a.CreateInstance("GsApprovalDllSpace.GsApprovalDll");
                string[] parts = new string[2];
                parts[0] = "bbb";
                parts[1] = "aaa";
                bool b = (bool)method1.Invoke(obj, new object[] { parts });
            }
            catch (Exception ex)
            {
 
            }
qldsrx 2012-12-11
  • 打赏
  • 举报
回复
引用 5 楼 nikolaichow 的回复:
引用 4 楼 wyd1520 的回复:string[] parts = new string[2]{ "bbb", "aaa"}; bool b = (bool)method1.Invoke(obj, new object[] { parts }); 改成这样报错:调用的目标发生了异常
捕获异常的内部异常,也就是Exception的InnerException属性,凡调用目标异常的,异常信息都要看InnerException
本拉灯 2012-12-11
  • 打赏
  • 举报
回复
引用 5 楼 nikolaichow 的回复:
引用 4 楼 wyd1520 的回复:string[] parts = new string[2]{ "bbb", "aaa"}; bool b = (bool)method1.Invoke(obj, new object[] { parts }); 改成这样报错:调用的目标发生了异常
这里面你都写的不对,当然异常。方法所在的 命名空与类名要对应的上 Type t = a.GetType("DllSpaceName.DllClassName"); //定义一个成员信息类对象数组,并从程序集中获取. MethodInfo method1 = t.GetMethod("submit"); object obj = a.CreateInstance("DllSpaceName.DllClassName");
nikolaichow 2012-12-11
  • 打赏
  • 举报
回复
引用 4 楼 wyd1520 的回复:
string[] parts = new string[2]{ "bbb", "aaa"}; bool b = (bool)method1.Invoke(obj, new object[] { parts });
改成这样报错:调用的目标发生了异常
本拉灯 2012-12-11
  • 打赏
  • 举报
回复
string[] parts = new string[2]{ "bbb", "aaa"}; bool b = (bool)method1.Invoke(obj, new object[] { parts });
nikolaichow 2012-12-11
  • 打赏
  • 举报
回复
DllSpaceName.DllClassName 就是dll空间名及类名 即:GsApprovalDllSpace.GsApprovalDll
nikolaichow 2012-12-11
  • 打赏
  • 举报
回复
引用 1 楼 hjywyj 的回复:
string[] parts = new string[2]{ "bbb", "aaa"}; bool b = (bool)method1.Invoke(obj, parts);
改成这样也不行
  • 打赏
  • 举报
回复
string[] parts = new string[2]{ "bbb", "aaa"}; bool b = (bool)method1.Invoke(obj, parts);

110,534

社区成员

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

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

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