异常猜想

之所以叫做异常猜想,是因为不确定具体出错的原因,但是原因肯定也跑不过如下的分析。

 

最近在写一个Macro的自动化程序,期望创建一个winform,并将ToolBox中的相应控件添加到Form Desinger上面。不能直接通过Object模型来实现,却可以通过IDesingerHost完成。

但是遇到如下异常:

1. 序列化异常。desingerHost.CreateComponent(GetType(<Control Type>))

2. COM转换异常。ISelectionProvider sp = serviceProvider.GetService(ISelectionProvider) as ISelectionProvider

 

解答:

1. 首先,从异常的信息可以推断出,control不支持序列化,所以无法创建相关的控件。但是为什么要序列化?我猜想可能是要与另一个进程相互通信,传递信息,所以需要控件序列话。但这似乎又属于Remoting,或wcf的事,能否通.net Remoting来实现呢?答案是肯定的,但这只能应用Custom控件上。也就是说,自己写了一个control,并实现了Remoting接口,你就可以解决此类问题,当然还要加上序列化,但此时貌似不必要了。

 

2. 对于第二个问题,我个人认为最有可能的原因是由于Visual Studio的Macro不支持两个进程之间的通讯,所以如果通过Add-In,Macro代码与form designer是在一个进程当中,在同一个.dll文件里。所以如果不想通过Add-in的形式完成Visual Studio的程式,请参考.NET Remoting.

 

 

 

***************************************************************************************

补充: 最终通过实验证明,猜想的结果是正确,即不支持两个进程之间的通讯。我们只能通过Add-in的形式来实现此问题的Automation.

****************************************************************************************

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值