运行是创建COM对象及转换为托管类问题

Meditate 2002-09-25 05:30:24
小弟在做一个项目,需要在.Net中动态创建Com对象。我将Com类库加入到.Net项目中,然后用反射技术创建Com实例,可是当我将创建好的对象转换为.Net托管类时发生错误,不知如何解决,请各位大虾赐教~~~~~~~~~~~~
部分代码如下:
Type t=Type.GetTypeFromProgID("MessageProvider.EmailManager" ); //ok
object obj2=Activator.CreateInstance(t); //ok

ComObj=(OMISCommon.EmailManager)obj2;/error:System.InvalidCastException

紧急求救!!!!!!!!!!!!1
...全文
109 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqchen79 2002-09-26
  • 打赏
  • 举报
回复
其实最好是把obj2转化成某个接口而不是对象,比如MessageProvider.EmailManager实现了一个IEmailManage接口,那么下面的语句应该是可以的:
OMISCommon.IEmailManage iemail =(OMISCommon.IEmailManage)obj2;

另外,可以在类名前面加上两个_试试看。
ComObj =(OMISCommon.__EmailManager)obj2;
TheAres 2002-09-26
  • 打赏
  • 举报
回复
c# cornetr 上面的一篇文章.

Accessing COM+ component using C#
http://www.c-sharpcorner.com/Tutorials/AccessingCOM+UsingCSIA.asp
TheAres 2002-09-26
  • 打赏
  • 举报
回复
托管代理是由 .net sdk 的 tblmp.exe 在前期转化的,

像你这种后期绑定的,是无法实现的.

我不知道有这个必要嘛?object obj2=Activator.CreateInstance(t) 这行产生的就是MessageProvider.EmailManager的一个对象. 虽然前面有一个object,已经可以调用他的方法和属性了.


Hope it helps a little.
----------------------------------------
To teach a fish how to swim.
Meditate 2002-09-26
  • 打赏
  • 举报
回复
先谢过兄台!你说的方法我知道。但是我是想将动态创建的对象转换为特定的类型——实际上就是Com对象在.Net上的托管代理。
这样就可以更方便的使用了。
TheAres 2002-09-26
  • 打赏
  • 举报
回复
ComObj=(OMISCommon.EmailManager)obj2;/error:System.InvalidCastException

不知道兄台这几话想用来做什么.

object obj2=Activator.CreateInstance(t);这句话已经产生对象了,直接调用方法不就可以了吗?

接下来用t.InvokeMember(....).....

参考MSDN,提醒,这种后期的绑定,有一定的风险,毕竟略过编译器这一关.



110,533

社区成员

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

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

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