我正在构建一个具有类工厂类型的 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.
这很好用,但我不知道如何定义和实例化通过该NumberFactory.GetNumber()方法返回的 ATL 对象。如果我这样定义 IDL 中的数字:
[ uuid(...) ]
coclass One {
[default] interface INumber;
}
Onecoclass 可以由用户实例化。但我想限制它,所以获得Onecoclass 实例的唯一方法是调用NumberFactory.GetNumber("One").
所以我的问题是:应该如何编写 IDL 以便用户无法实例化One,但仍然能够One从NumberFactorycoclass 内部实例化并将INumber接口返回One给用户?
此外,为了使其工作,在 ATL 方面是否必须做任何特别的事情?