模块间传递对象,设计上的问题

passionhip 2009-03-20 03:00:52
在exe工程中,动态加载一个dll。

exe中有个A类,派生自X类,X是abstract类

在dll工程中也加入了X类,然后实现一个dll的初始化函数,参数就是X的对象

动态加载dll,在exe工程中调用这个初始化函数,并传入A类的指针

现在的错误是:

An unhandled exception of type 'System.ArgumentException' occurred in mscorlib.dll

Additional information: 类型 A 的对象无法转换为类型 X

出错的位置是调用初始化函数的位置:

init.Invoke(obj, args); // 其中args就是A对象


==============================================================================
下面是我要问的问题:

1、我的实现方法从语法上是否有问题,是否可行?
2、为什么会出现上述错误?
3、如果方法不可行,有没有更好的方式解决对象在模块间传递的问题?

==============================================================================

有什么不懂的地方请回帖提出。

在线等,先谢过~
...全文
98 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
passionhip 2009-03-24
  • 打赏
  • 举报
回复
问题解决了,使用的是你们提供的方法,不过问题有所升级,下面是升级版的问题连接,希望参与讨论。

《以Exe模块中的主Form的子窗口的形式,显示dll中的Form,注意dll是动态加载的》
http://topic.csdn.net/u/20090324/16/a8aaa8fe-2832-4c21-b00a-c8ee41e75ee3.html
vrhero 2009-03-23
  • 打赏
  • 举报
回复
哦,不对...是错了,这两个X类不是一个类...

今晚上犯了两个低级错误了...看来酒精确实对大脑有害,呵呵
vrhero 2009-03-23
  • 打赏
  • 举报
回复
exe中有个A类,派生自X类

Additional information: 类型 A 的对象无法转换为类型 X

init.Invoke(obj, args); // 其中args就是A对象
天乐 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 vrhero 的回复:]
这个问题其实很简单,你就算把“X类独立到一个dll中”也不行...

因为派生类不能转换为基类,你需要实现一个转换方法...
[/Quote]

疑惑“派生类不能转换为基类”的说法,向上隐式转换是可以的啊~~

向下(从基类转位派生类)不可以,必须强制转换

orain 2009-03-23
  • 打赏
  • 举报
回复
你把兩個 X 類要共用的方法提成一個接口,然後這兩個 X 類都實現這個接口,調用的時候用接口調用就可以了。
jonas401 2009-03-22
  • 打赏
  • 举报
回复
假设楼主的问题正如agentianle所说的情况,在dll中有X类的定义,在exe中也有X类的定义的话
这两个X类对于JTL来说,是两个完全不相干的类

综上所述,得出答案如下:
1 语法无问题,要不然也不给你编译过
2 两个完全不相干的类当然无法进行隐式转换
3 按agentianle给出的方法似乎已经可以解决问题了
vrhero 2009-03-22
  • 打赏
  • 举报
回复
这个问题其实很简单,你就算把“X类独立到一个dll中”也不行...

因为派生类不能转换为基类,你需要实现一个转换方法...
天乐 2009-03-22
  • 打赏
  • 举报
回复
更正:

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

--->>>
你现在“exe中有个A类,派生自X类,X是abstract类”,“dll工程中也加入了X类”

也就是说,你有两个X类,一个在exe中,一个在dll中,这样是会出问题的

请把公用的东西独立出来,单独放到一个程序集中,供其他项目引用
天乐 2009-03-22
  • 打赏
  • 举报
回复
请把X类独立到一个dll中

你现在exe中有个A类,dll工程中也加入了X类,这是两个不同的东西了
cxb_wind 2009-03-20
  • 打赏
  • 举报
回复
obj才是A对象吧?
passionhip 2009-03-20
  • 打赏
  • 举报
回复
自己顶。。。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧