我正在構建一個類工廠類型的ATL類型庫。事情八九不離十是這樣的:如何防止暴露在ATL類型庫中的coclass實現
[ 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;
}
然後,用戶可以得到實現通過NumberFactory
的INumber
接口的類的實例。
這很好,但我不知道如何定義和實例化通過NumberFactory.GetNumber()
方法返回的ATL對象。如果我在IDL這樣定義的數字:
[ uuid(...) ]
coclass One {
[default] interface INumber;
}
的One
組件類可以由用戶進行實例化。但是我想限制它,所以你可以通過調用NumberFactory.GetNumber("One")
獲得一個One
coclass的實例。
所以我的問題是:應該如何IDL編寫,因此用戶無法實例One
,但仍然能夠然後NumberFactory
組件類中實例從One
和One
的INumber
界面返回給用戶?
此外,是否有什麼特別的事情必須在事情的ATL方面完成才能使其工作?
非常好!這正是我需要的!謝謝! 這實際上是我找的比我發現的要好,哈哈... – Miquella 2009-07-29 04:54:09