首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能在c#中转换com对象?

为什么我不能在c#中转换com对象?
EN

Stack Overflow用户
提问于 2016-02-22 13:16:38
回答 1查看 58关注 0票数 0

源代码:

代码语言:javascript
复制
   IMoniker moniker;
    int hresult = NativeMethods.CreateFileMoniker(kFileName, out moniker);
    IBindCtx pbc;
    NativeMethods.CreateBindCtx(0, out pbc);
    Object obj;
    Guid guid = new Guid();
    guid = typeof(GraphicsLibrary.IPolyline).GUID;
    moniker.BindToObject(pbc, null, guid, out obj);
    GraphicsLibrary.IPolyline pl = (GraphicsLibrary.IPolyline)obj;
    GraphicsLibrary.PolylineObjClass o = (GraphicsLibrary.PolylineObjClass)pl;
    foreach (GraphicsLibrary.PolyPoint ptt in o.Points)
    {
        Trace.WriteLine(String.Format("point ({0}, {1})", ptt.x, ptt.y));
    }
    return 0;

GraphicsLibrary.PolylineObjClass o = (GraphicsLibrary.PolylineObjClass)pl;上的异常

详细信息:

“System.InvalidCastException”类型的异常发生在DotNetClient.exe中,但未在用户代码中处理

但是我已经实现了IProvideClassInfo接口并注册了类型化。

为什么我不能投出这个物体?

PS:完整的源代码,请参考https://github.com/Jichao/comtut/tree/master/monikers/FileMoniker

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-22 13:25:12

您的对象是IPolyline的实现,而不是来自PolylineObjClass或PolylineObjClass本身的任何超类。

  • A实现IPolyline
  • B实现IPolyline
  • myFirstObj = new B();
  • mySecondObj = (A) myFirstObj; <=失败,因为B可能实现其他方法或属性,A没有,所以不可能进行强制转换
  • mySecondObj = (IPolyline) myFirstObj; <= work,您将强制转换限制在相同的方法范围内。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35554716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档