我想作一个像Winamp一样的动态加载模块的功能.
现在我只是不知道如何在运行时通过DLL文件动态创建对象?
望大家赐教.

解决方案 »

  1.   

    Assembly a = Assembly.LoadFrom(args[0]);
            Type[] mytypes = a.GetTypes();
            BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public | 
                BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);        foreach(Type t in mytypes)
            {
                MethodInfo[] mi = t.GetMethods(flags);
                Object obj = Activator.CreateInstance(t);            foreach(MethodInfo m in mi)
                {
                    m.Invoke(obj, null);
                }
            }
      

  2.   

    偶练习的时候写的一段代码,可能有点用                    System.Reflection.Assembly a = Assembly.LoadFrom(fileName);
                        System.Type[] tps = a.GetTypes();
                        foreach (Type t in tps)
                        {
                            object o = System.Activator.CreateInstance(t);
                            // ...
                        }
      

  3.   

    楼主看看有关"反射"方面的书:如《VB.NET反射参考手册》,C#的版本不知有没有。
      

  4.   

    用.net的反射技术,System.Reflection.Assembly a = Assembly.LoadFrom(fileName);
                        System.Type[] tps = a.GetTypes();
                        foreach (Type t in tps)
                        {
                            object o = System.Activator.CreateInstance(t);
                        }
      

  5.   

    用反射
    楼主要是不清楚看看msdn关于反射的内容
    Assembly a = Assembly.LoadFrom(args[0]);
            Type[] mytypes = a.GetTypes();
            BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public | 
                BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);        foreach(Type t in mytypes)
            {
                MethodInfo[] mi = t.GetMethods(flags);
                Object obj = Activator.CreateInstance(t);            foreach(MethodInfo m in mi)
                {
                    m.Invoke(obj, null);
                }
            }
      

  6.   

    根本不需要通过Assembly.LoadType.GetType(类名的全名), 然后根据类型创建就可以了Dotnet 会自动根据类型去找对应的dll的全名要这样写TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly 必要时还需要后加版本号,看文档吧