我正在构建一个具有类工厂类型的 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;
}
One
coclass 可以由用户实例化。但我想限制它,所以获得One
coclass 实例的唯一方法是调用NumberFactory.GetNumber("One")
.
所以我的问题是:应该如何编写 IDL 以便用户无法实例化One
,但仍然能够One
从NumberFactory
coclass 内部实例化并将INumber
接口返回One
给用户?
此外,为了使其工作,在 ATL 方面是否必须做任何特别的事情?