我建立一个ATL类型库有类型的类工厂。 事情八九不离十是这样的:
[ object, uuid(...), ... ]
interface INumber : IDispatch {
[propget, id(0)] HRESULT Value([out, retval] LONG* pVal);
}
[ object, uuid(...), ... ]
interface INumberFactory : IDispatch {
[id(1)] HRESULT GetNumber([in] BSTR numberName, [out, retval] INumber* pVal);
}
[ uuid(...) ]
coclass NumberFactory {
[default] interface INumberFactory;
}
然后,用户可以得到一个实现了一个类的实例INumber
通过接口NumberFactory
。
这种运作良好,但我无法弄清楚如何定义和实例化通过返回的ATL对象NumberFactory.GetNumber()
方法。 如果我在IDL这样定义的数字:
[ uuid(...) ]
coclass One {
[default] interface INumber;
}
的One
组件类可以由用户进行实例化。 但我想,以限制它,就可以得到的一个实例的唯一办法One
组件类是通过调用NumberFactory.GetNumber("One")
所以我的问题是:应该如何IDL编写,因此用户无法实例化One
,但仍然能够实例化One
从此内NumberFactory
组件类和返回INumber
的接口, One
用户?
此外,有什么特别的必须在事物的ATL端进行,为了使这项工作?