大体是这样的,我在本程序里加载了一个Assembly,然后通过MethodInfo.Invoke()方法调用Assembly里的一个有参函数,因为Invoke的时候只能传一个object型数组作为被调用函数的参数,所以在那个函数里我得把它转换回我要用的数据类型。问题就在这里了,转换失败
但不用MethodInfo.Invoke而直接调用却可以(目标方法在本程序集内,但我实现的程序不能这样工作)。。不知道为什么。高手赐教!!部分代码如下:
private void func1()
{
Object[] parms = new object[]{MyStructure("id","msg")};
Assembly ass = new Assembly.LoadFrom("本程序.exe");
ass.GetType("TestNameSpace.TestClass", true).GetMethod("Test").Invoke(null, parms);
}private void func2()
{
Object[] parms = new object[]{MyStructure("id","msg")};
Test(parms[0]);
}......
public static void Test(object parm)
{
MyStructure myStrct = (MyStructure)parm;←func1中这里报错,无法转换,func2正常
MyStructure myStrct = new MyStructure("id","msg");func1,func2中都正常
}
但不用MethodInfo.Invoke而直接调用却可以(目标方法在本程序集内,但我实现的程序不能这样工作)。。不知道为什么。高手赐教!!部分代码如下:
private void func1()
{
Object[] parms = new object[]{MyStructure("id","msg")};
Assembly ass = new Assembly.LoadFrom("本程序.exe");
ass.GetType("TestNameSpace.TestClass", true).GetMethod("Test").Invoke(null, parms);
}private void func2()
{
Object[] parms = new object[]{MyStructure("id","msg")};
Test(parms[0]);
}......
public static void Test(object parm)
{
MyStructure myStrct = (MyStructure)parm;←func1中这里报错,无法转换,func2正常
MyStructure myStrct = new MyStructure("id","msg");func1,func2中都正常
}
解决方案 »
- dgv取值时 未将对象引用设置到对象的实例
- 请教:如何使用存储过程得到多行结果集
- 如何在TextBox 输入城市编号时光标移开 Label上就显示城市名
- System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常。---这是怎么回事???
- wnform窗体,我对事情的处理过程有点迷惑,请大家帮助一下
- 如何设置toolStrip中按钮的图片
- 火狐中js怎样调用web服务,解决送100分
- 急,求打印源代码
- DataGrid相关问题,请各位帮帮忙!
- 在remonting中,关于接口的使用问题,请大家讨论。(人穷,没分,但我会一辈子感激各位的)
- 动态生成的下拉列表怎样添加事件
- datagridview上对每个item焦点的变化可激活什么事件
Assembly ass = new Assembly.LoadFrom("本程序.exe");
添加程序集引用的时候,程序集已经有一个副本出现在你的应用程序目录下,这时候你在加载一份程序集(在AppDomain中已经存在了内容一样的程序集),这时候会出现两份内容一样,但是被标识为不同的副本存在。Assembly.LoadFrom(string assemblyFile);中的路径应该指向你的应用程序目录下的那个.exe,而不是原来那个文件的路径,这样同一个程序集就不会被加载2次。
还有,LoadFrom是静态方法,貌似应该这么写:
Assembly asm = Assembly.LoadFrom(@"...");
这里的parms是object[]类型的,但是你却用public static void Test(object parm)来接收,所以出错。
To: tjvictor MethodInfo.Invoke方法的第二个参数MSDN里是这样说的 :
调用的方法或构造函数的参数列表。这是一个对象数组,这些对象与要调用的方法或构造函数的参数具有相同的数量、顺序和类型。如果没有参数,则此应为空引用(Visual Basic 中为 Nothing)。
而且异常也没有在Test函数上抛出,而是在类型转换那里抛出的:_message "指定的转换无效。"
感谢两位帮忙,我发现在转换的时候转换成.net的类型没问题,但我自定义的就不行了
是不是跟序列化有关系??
{
MyStructure myStrct = (MyStructure)parm;←func1中这里报错,无法转换,func2正常============
你调试的时候,自己看一下parm的类型即可。
parm的类型为MyStructure,但是如果我在Test函数里无法访问MyStructure的数据成员,编译的时候会报错,说是object类型中无此成员,编译无法通过
唉。无奈,不行我就用字符串数组的了。 -_-|||