尘埃1206 2017-06-28 07:13 采纳率: 0%
浏览 815

ATL如何避免coclass的实现被包含在库块中?

我建立了一个atl类型库,并且创建了一个类厂,部分代码如下:
[ object, uuid(...), ... ]
interface ICircle : IDispatch {
[propget, id(0)] HRESULT Value([out, retval] LONG* pVal);
}

[ object, uuid(...), ... ]
interface IGeometryFactory : IDispatch {
[id(1)] HRESULT GetGeometry( [out, retval] IGeometry* pVal);
}

[ uuid(...) ]
coclass GeometryFactory {
[default] interface IGeometryFactory;
}


我希望ICircle只能通过IGeometryFactory的GetGeometry方法创建,而不能通过下面的方式创建:
ICircle circle = new Circle();


现在存在两个问题:
(1)怎么才能做到禁止客户端用new的方式创建ICircle呢?
(2)如果使用IGeometryFactory创建ICircle,接口中的返回参数是IGeometry*,为什么在C#客户端调用返回的是Geometry,导致我用下面的方式创建总是报错:
IGeometryFactory geoFac = new GeometryFactory();
ICircle circle = geoFac.GetGeometry() as ICircle;//这里GetGeometry返回的是Geometry类型,不是IGeometry类型


  • 写回答

1条回答 默认 最新

  • devmiao 2017-06-28 16:41
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献