{"对象类型无法转换为目标类型。"}

anguswdm 2010-06-02 11:04:29
先上代码:见下图:




经过多次验证,发现在SCAN的第一个参数中报标题这个异常。

这个异常的诡异之处在于:

这段代码放在我的主程序中是没有问题的,现在截图的这个是通过测试框架调用的,就发生异常了。
通过对比两边的参数 remMonitor
发现是一模一样的。

恳请各位大仙帮我指点一下。

PS: 是不是因为rsd继承了MarshalByRefObject,而remMonitor也继承了MarshalByRefObject
所以rsd调用remMonitor的时候就出现错了呢?
如果是这样的话,为何我的主程序就没错误?
...全文
344 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
anguswdm 2010-06-03
  • 打赏
  • 举报
回复
又折腾了一上午,还是没搞定
哎,先放一放吧。
anguswdm 2010-06-03
  • 打赏
  • 举报
回复
上班顶一下。
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
大家吃饭都还没回吗?
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
啊,你没有领会我的意思,我说的一模一样
是指正常程序中 和 我这个测试程序中 的这个变量 是 一模一样。
强调一模一样是为了排除这个变量本身的错误 呵呵
[Quote=引用 3 楼 idot 的回复:]

调用远程对象,一般都是调用了对象的副本而不是对象本身

[Quote=引用楼主 anguswdm 的回复:]
这段代码放在我的主程序中是没有问题的,现在截图的这个是通过测试框架调用的,就发生异常了。
通过对比两边的参数 remMonitor
发现是一模一样的。 C# code
//
只能说明成员变量一样,但不代表对象是同一个对象。

[/Quote]
[/Quote]
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
remMonitor的定义在一楼,
三张图片是三个不同的类,放在一起不好分辨 呵呵
仔细看下 声明在第三张,定义在第一张。

另:
那个(IProgressStatus)是我另外加的,本身其实是没有的。
见它下面那行代码。
就是因为下面的那个报这个错误,所以我才加上这个(IProgressStatus)看看是否是它的问题。
结果不是 呵呵 。
[Quote=引用 4 楼 computerfox 的回复:]

你的问题是不是因为remMonitor不能转成IProgressStatus?
remMonitor的定义代码贴出来看看?
[/Quote]
捷哥1999 2010-06-02
  • 打赏
  • 举报
回复
你的问题是不是因为remMonitor不能转成IProgressStatus?
remMonitor的定义代码贴出来看看?
idot 2010-06-02
  • 打赏
  • 举报
回复
调用远程对象,一般都是调用了对象的副本而不是对象本身

[Quote=引用楼主 anguswdm 的回复:]
这段代码放在我的主程序中是没有问题的,现在截图的这个是通过测试框架调用的,就发生异常了。
通过对比两边的参数 remMonitor
发现是一模一样的。
//
只能说明成员变量一样,但不代表对象是同一个对象。

[/Quote]
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
完整异常:

环境逐一仔细检查过,完全没有差异!
我极其无比纠结!
[Quote=引用 1 楼 ly302 的回复:]

能把具体的异常信息贴出来么?

还有就是如果原来的可以

新的环境不行,看看你原来调用的dll,新环境里是否也具备?
[/Quote]
皇城龙三 2010-06-02
  • 打赏
  • 举报
回复
能把具体的异常信息贴出来么?

还有就是如果原来的可以

新的环境不行,看看你原来调用的dll,新环境里是否也具备?
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
好的,我再重头思考一下。
[Quote=引用 34 楼 softman11 的回复:]

首先,你要把你所有的认为是真的假设统统抛弃,例如你认为两个完全一样,这样就不要再认为是一样的了。
因为道理很简单,如果不是微软错了,那么你的假设退出来道理就推不走了,那么只有一种更可能,就是你的假设错了。这是我调试程序的经验。

其次,如果故障确实是不能传入对象到IProgressStatus变量里面去,那么只有一种可能,就是你这个对象定义有问题,肯定是实现这个接口的环节出了问题,如果正确……
[/Quote]
softman11 2010-06-02
  • 打赏
  • 举报
回复
首先,你要把你所有的认为是真的假设统统抛弃,例如你认为两个完全一样,这样就不要再认为是一样的了。
因为道理很简单,如果不是微软错了,那么你的假设退出来道理就推不走了,那么只有一种更可能,就是你的假设错了。这是我调试程序的经验。

其次,如果故障确实是不能传入对象到IProgressStatus变量里面去,那么只有一种可能,就是你这个对象定义有问题,肯定是实现这个接口的环节出了问题,如果正确实现了接口,这样传送肯定是不会出问题的,虽然你认为你没有问题,但是你这个假设必须抛弃。仔细检查。

最后,如果真的是主程序OK,Unit测试不行。拿肯定两个环境是不一样,这点不用质疑了,否则不可能出现这个问题。
因为你给的信息太少,都是按照你的假设推理,显然肯定走入死胡同的,因为按照你的假设如果能推走,你就不会发这个问题贴了。所以,你的假设一定有不是你想象的地方。

这样的问题经常遇到,但是根据经验,最后问题解决之后发现99%都是当初的假设错误。毕竟微软BUG的可能性还是他太小了。
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
啊,帅哥,我没有把代码贴全,方法显然都实现了 要不主程序运行的也会不正常。
一楼的是三张图片,三个类。。。
不仔细看看不出来 呵呵
我的错,应该再说的清楚一些。
[Quote=引用 31 楼 softman11 的回复:]

引用 29 楼 anguswdm 的回复:
应该跟它的定义没关系吧?
为保险起见,贴出来 上图:


引用 26 楼 softman11 的回复:

引用楼主 anguswdm 的回复:
先上代码:见下图:



经过多次验证,发现在SCAN的第一个参数中报标题这个异常。

这个异常的诡异之处在于:

这段代码放在我的主程序中是没有问题的,现在截图的这个是通过测……
[/Quote]
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
下班前再顶一下,回去看回复。
softman11 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 anguswdm 的回复:]
应该跟它的定义没关系吧?
为保险起见,贴出来 上图:


引用 26 楼 softman11 的回复:

引用楼主 anguswdm 的回复:
先上代码:见下图:



经过多次验证,发现在SCAN的第一个参数中报标题这个异常。

这个异常的诡异之处在于:

这段代码放在我的主程序中是没有问题的,现在截图的这个是通过测试框架调用的,就发生异常了。
通过对比两边的……
[/Quote]

你的RemoteProgessStatus 没有实现任何IProgressStatus里面的方法呀?
这样类型转换怎么不出错呢?
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
放个最简单的STRING没有问题。。。
其实最奇怪的问题是:
我主程序调用到这里的时候就没有问题,
我现在正在用nunit写单元测试,这个是SETUP中必须要走的步骤,它涉及了一些初始化工作。
上下文跟主程序绝无二异,崩溃啊~
[Quote=引用 28 楼 ledmhcc 的回复:]

=-=没想法了,再进一步做个小实验
Scan()第一个参数不要用IProgressStatus 或 RemoteProgessStatus 对象,你随便从项目里拿个对象出来,再上面实例化后扔进去看,这样不会出错了吧。。。
不报错的话只能证明你class RemoteProgessStatus 在某个地方存在问题,或者是RemoteSetupDomain 里Scan()方法的参数你设置的不对……
[/Quote]
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
应该跟它的定义没关系吧?
为保险起见,贴出来 上图:

[Quote=引用 26 楼 softman11 的回复:]

引用楼主 anguswdm 的回复:
先上代码:见下图:




经过多次验证,发现在SCAN的第一个参数中报标题这个异常。

这个异常的诡异之处在于:

这段代码放在我的主程序中是没有问题的,现在截图的这个是通过测试框架调用的,就发生异常了。
通过对比两边的参数 remMonitor
发现是一模一样的。

恳请各位大仙帮我指点一下。

PS: 是不是因为rsd继……
[/Quote]
ledmhcc 2010-06-02
  • 打赏
  • 举报
回复
=-=没想法了,再进一步做个小实验
Scan()第一个参数不要用IProgressStatus 或 RemoteProgessStatus 对象,你随便从项目里拿个对象出来,再上面实例化后扔进去看,这样不会出错了吧。。。
不报错的话只能证明你class RemoteProgessStatus 在某个地方存在问题,或者是RemoteSetupDomain 里Scan()方法的参数你设置的不对
anguswdm 2010-06-02
  • 打赏
  • 举报
回复
我彻底无语了,竟然还是错。。。我重新编译了的,所有的组件都是最新的。
[Quote=引用 25 楼 ledmhcc 的回复:]

你Scan()方法第一个参数换成别的对象看看,是不是还是报错
Scan(RemoteProgessStatus remMonitor,.....)
[/Quote]
softman11 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 anguswdm 的回复:]
先上代码:见下图:




经过多次验证,发现在SCAN的第一个参数中报标题这个异常。

这个异常的诡异之处在于:

这段代码放在我的主程序中是没有问题的,现在截图的这个是通过测试框架调用的,就发生异常了。
通过对比两边的参数 remMonitor
发现是一模一样的。

恳请各位大仙帮我指点一下。

PS: 是不是因为rsd继承了MarshalByRefObject……
[/Quote]

Iprogressstatus在哪儿定义的?
你的类哪个方法实现了这个接口定义?
我没有看到呢?
ledmhcc 2010-06-02
  • 打赏
  • 举报
回复
你Scan()方法第一个参数换成别的对象看看,是不是还是报错
Scan(RemoteProgessStatus remMonitor,.....)
加载更多回复(17)

110,537

社区成员

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

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

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