我用下面这段代码调用一个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(" 装载出错 !"); } } }
,调用的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(" 装载出错 !"); } } }
t.GetMethod("aa", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase)
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)