我用下面这段代码调用一个C#dll,return m.Invoke(o, ObjArray_Parameter);//这一句有时报错
,调用的DLL里面只有2个自定义struct和一个函数.
 Assembly MyAssembly = Assembly.LoadFrom(lpFileName);                Type[] type = MyAssembly.GetTypes();                foreach (Type t in type)
                {// 查找要调用的命名空间及类                     if (t.Namespace == Namespace && t.Name == ClassName)
                    {// 查找要调用的方法并进行调用                         MethodInfo m = t.GetMethod(lpProcName);                        if (m != null)
                        {                            object o = Activator.CreateInstance(t);
                            return m.Invoke(o, ObjArray_Parameter);                        }                        else MessageBox.Show(" 装载出错 !");                    }                }            }

解决方案 »

  1.   

    这样试试:
    t.GetMethod("aa", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase)
      

  2.   

    还是出错
    System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
       在 System.Runtime.InteropServices.Marshal.StructureToPtr(Object structure, IntPtr ptr, Boolean fDeleteOld)
       在 Template.Class1.Draw(ArrayList ObjectValue, Object ObjectYS, Int32 IniWidth, Int32 BJSZ)
       --- 内部异常堆栈跟踪的结尾 ---
       在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       在 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)