可不可以外部控制exe中的方法? 本帖最后由 eirouna 于 2012-10-15 13:55:28 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我写的反射Assembly Asm = Assembly.Load("CheckRun");//CheckRun是写好的exeType type = Asm.GetType("ControlE");//ControlE是我写CheckRun中的一个接口object AssClas = Activator.CreateInstance(type);MethodInfo method = type.GetMethod("button");//button是要调用的方法BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;object[] parameters = new object[] { };object returnValue = method.Invoke(AssClas, flag, Type.DefaultBinder, parameters, null);但是报错“值不能为空。参数名: type”,是在object AssClas = Activator.CreateInstance(type);的时候报的错。另外关于路径,如果CheckRun放在同一路径是可以的,但我做好后的路径应该不在一起,该怎么写? 如果写成Type type = Asm.GetType("CheckRun.ControlE");//CheckRun为命名空间则会报错“无法创建接口的实例。” Assembly.Load()的参数具体到你的exe路径Asm.GetType()的参数具体到类名,不能用接口 if (type.GetInterface(typeof(接口).FullName) != null)这个可以判断你的类是否实现这个接口,如果是接口 i = (接口)assembly.CreateInstance(type.FullName,true); Assembly.Load()的参数具体到你的exe路径会报错“未能加载文件或程序集“D:\\WebService1\\CheckRun”或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047)”即使写CheckRun.exe也同样报错“未能加载文件或程序集“D:\\WebService1\\CheckRun.exe”或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047)” 如果用Assembly.LoadFile()的话就会发现重复加载,因为那个程序本来是开着的。 感谢ershou007的帮助,虽然最后不是用这个方法写的。 请教:关于反射+泛型+重载的问题 请问下系统日志应该如何设计? 求一sql语句 关于 多个textBox的Text属性赋值问题? 100分,求教线程,弹出对话框的解决办法 treeView加载硬盘目录速度太慢 一个小问题,但是弄的人很烦。 在C#里为什么得到的值都是16进制? winform Telerik raggridview 过滤条件 以及过滤中的这些文本如何设置成中文 VS.net下还能用DirectX吗?请教微软专家。 排序怎么做? 怎么改变按钮的图片??
我写的反射Assembly Asm = Assembly.Load("CheckRun");//CheckRun是写好的exe
Type type = Asm.GetType("ControlE");//ControlE是我写CheckRun中的一个接口
object AssClas = Activator.CreateInstance(type);
MethodInfo method = type.GetMethod("button");//button是要调用的方法
BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;
object[] parameters = new object[] { };
object returnValue = method.Invoke(AssClas, flag, Type.DefaultBinder, parameters, null);
但是报错“值不能为空。参数名: type”,是在object AssClas = Activator.CreateInstance(type);的时候报的错。
另外关于路径,如果CheckRun放在同一路径是可以的,但我做好后的路径应该不在一起,该怎么写?
则会报错“无法创建接口的实例。”
Asm.GetType()的参数具体到类名,不能用接口
Assembly.Load()的参数具体到你的exe路径会报错“未能加载文件或程序集“D:\\WebService1\\CheckRun”或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047)”
即使写CheckRun.exe也同样报错“未能加载文件或程序集“D:\\WebService1\\CheckRun.exe”或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047)”
如果用Assembly.LoadFile()的话就会发现重复加载,因为那个程序本来是开着的。