在exe工程中,动态加载一个dll。exe中有个A类,派生自X类,X是abstract类在dll工程中也加入了X类,然后实现一个dll的初始化函数,参数就是X的对象动态加载dll,在exe工程中调用这个初始化函数,并传入A类的指针现在的错误是:An unhandled exception of type 'System.ArgumentException' occurred in mscorlib.dllAdditional information: 类型 A 的对象无法转换为类型 X出错的位置是调用初始化函数的位置:init.Invoke(obj, args);   // 其中args就是A对象
==============================================================================
下面是我要问的问题:1、我的实现方法从语法上是否有问题,是否可行?
2、为什么会出现上述错误?
3、如果方法不可行,有没有更好的方式解决对象在模块间传递的问题?==============================================================================有什么不懂的地方请回帖提出。在线等,先谢过~

解决方案 »

  1.   

    请把X类独立到一个dll中你现在exe中有个A类,dll工程中也加入了X类,这是两个不同的东西了
      

  2.   

    更正:你现在exe中有个A类,dll工程中也加入了X类,这是两个不同的东西了--->>>
    你现在“exe中有个A类,派生自X类,X是abstract类”,“dll工程中也加入了X类”也就是说,你有两个X类,一个在exe中,一个在dll中,这样是会出问题的请把公用的东西独立出来,单独放到一个程序集中,供其他项目引用
      

  3.   

    这个问题其实很简单,你就算把“X类独立到一个dll中”也不行...因为派生类不能转换为基类,你需要实现一个转换方法...
      

  4.   

    假设楼主的问题正如agentianle所说的情况,在dll中有X类的定义,在exe中也有X类的定义的话
    这两个X类对于JTL来说,是两个完全不相干的类综上所述,得出答案如下:
    1 语法无问题,要不然也不给你编译过
    2 两个完全不相干的类当然无法进行隐式转换
    3 按agentianle给出的方法似乎已经可以解决问题了
      

  5.   

    exe中有个A类,派生自X类Additional information: 类型 A 的对象无法转换为类型 X init.Invoke(obj, args);  // 其中args就是A对象
      

  6.   

    问题解决了,使用的是你们提供的方法,不过问题有所升级,下面是升级版的问题连接,希望参与讨论。《以Exe模块中的主Form的子窗口的形式,显示dll中的Form,注意dll是动态加载的》
    http://topic.csdn.net/u/20090324/16/a8aaa8fe-2832-4c21-b00a-c8ee41e75ee3.html