string assemblyName="xx";
string className="cc";
Assembly assembly =  Assembly.LoadFile(assemblyName);
Object obj = assembly.CreateInstance(className);
cc c = (cc)obj;// 这里为什么会抛出InvalidCastException得到得obj确实是className类型得,就是cast不了。求高手帮忙,急!

解决方案 »

  1.   

    Dim O As New Form()
            Dim ApplicationName As String = [Assembly].GetExecutingAssembly.GetName.Name
            O = [Assembly].GetExecutingAssembly.CreateInstance(ApplicationName & ".Form1")  '一定要加上工程名前缀
            O.Show()
      

  2.   

    cc c = (cc)obj;// 这里为什么会抛出InvalidCastException改写成 
    if(obj is cc)  
      cc c = obj as cc
      

  3.   

    首先,有个问题,我不明白
    你既然在程序里面可以直接用
    cc c = (cc)obj;那么就证明程序知道cc这个类,已经把这个包含cc的文件添加到引用中了
    那你干吗要用反射呢?如果你没有添加的话,既然用了反射,又何必再把这个类转换呢?string DllPath=System.IO.Directory.GetCurrentDirectory();Assembly assembly = Assembly.LoadFile(DllPath+"\\your.dll");string AssName=assembly.GetName().Name;
    Type SearchType=null;
    Type[] myTypes=assembly.GetTypes();
    foreach(Type OneType in myTypes)
    {
        string TypeName=OneType.Name;
        if(TypeName.ToLower()=="yourClassName")
    SearchType=OneType;
    }
    object  test=Activator.CreateInstance(SearchType);
      

  4.   

    将Object obj = assembly.CreateInstance(className);
    cc c = (cc)obj;改成:
    cc c=(Type.GetType(className))Activator.CreateInstance(Type.GetType(className)));
      

  5.   

    楼上的,你的代码调试过吗?能走通吗?难道可以用(Type.GetType(className))强制类型转换吗?