//WebService
private string Test(DavidMessage.SendObject MessObject,string PipelineType)
{
try
{
//读该类型的类名称
string TypeString   = ConfigurationSettings.AppSettings[PipelineType]; //组合该类型的DLL名称
string DllPath = Server.MapPath(this.Context.Request.ApplicationPath) + "\\Bin\\" +PipelineType+".dll"; //**************************************************************************
//这里使用反射调用配置中的DLL文件,实现不同通道的短信发送
//利用反射进行动态加载和调用.
Assembly ass=Assembly.LoadFrom(DllPath); //利用dll的路径加载
 
//加载dll后,需要使用dll中某类.
Type type=ass.GetType(TypeString);//利用类型的命名空间和名称获得类型
 
//需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略
//利用指定的参数实例话类型
Object obj = Activator.CreateInstance(type);
 
//调用类型中的某个方法:
//需要首先得到此方法
MethodInfo mi=type.GetMethod("SendMessage");//通过方法名称获得方法 object [] args = new object [] {(object)MessObject}; //为调用的方法赋参数值 //然后对方法进行调用,多态性利用参数进行控制
object result = mi.Invoke(obj,args);//根据参数直线方法,返回值就是原方法的返回值
//**************************************************************************
return result.ToString();
}
catch(Exception Ex)
{
return Ex.ToString();
}
}这是在WebService里使用的,出现了这种怪显现,那位兄弟见过,帮帮忙.这里先行谢过了.

解决方案 »

  1.   

    高分高难:使用反射时出现"对象类型无法转换为目标类型" 
    =====
    那个地方??
    object result = mi.Invoke(obj,args) 是这里吗??
    调试一下看看
      

  2.   

    应该是传进来的参数的问题吧
    对TypeString检查了吗?
      

  3.   

    SendMessage 方法参数类型十分为 DavidMessage.SendObject ?
      

  4.   

    lz
    同一个dll,如果你同时通过引用和assembly.loadfrom
    这个dll中的class 在这两种方式下其实是两种类型,因为在不同的assembly下
      

  5.   

    创建实例 的时候记得加多个参数才能创建对象成功.我不知道你的错误是方法调用出错还是创建对象出错,如果是创建的对象为空,则CreateInstanct(type,true)加了这个true,再往你的类加个私有构造器,不带参数private sub new,那么即可创建成功,这个问题我试了好几次才知道.
    有兴趣就参考下吧.我写了出来.
    http://blog.csdn.net/go2newlife/archive/2007/11/27/1904687.aspx