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类型


http://blog.csdn.net/wenzhou1219/article/details/51925131