描述:
library CCCLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(0BDC1256-9AF0-46A0-BD71-3561FCD218BA),
helpstring("CCC Class")
]
coclass P645Meter
{
[default] interface ICCC;
interface IBBB;
interface IAAA;
};
};
在客户端我用 hr = p.CreateInstance(__uuidof(CCC));
可以正确得到 CCC 的接口,但是我现在得不到其他两个接口,希望哪位大侠能给个答案,谢了先
是不是用 QueryInterface() 啊?
可是我用了,却的不到正确应用,应该怎么用啊?
帮个忙吧
解决方案1:
1。如果用ATL开发,别忘了在 BEGIN_COM_MAP(CXXX) 中列出所有的接口。调用时用QueryInterface。用CComQIPtr 存储接口指针更简单。
2。组件不能继承,但接口可以继承。
欢迎访问我用 COM/ATL/WTL 写的报表构件。主页:www.GridppReport.com
老大,贪多嚼不烂阿,先把基础的东西搞清楚吧。
解决方案3: 就用QueryInterface()
不能继承,能包含或聚集。
聚合或者包容
解决方案5: 包容比较类似于设计模式中的工厂方法,外部组件和内部组件是一种使用/被使用的关系,外部组件实现一套和内部组件相同的接口,通过这些接口外部组件需要将所以关于内部组件接口的调用转发给内部组件。
聚集是直接将内部组件的接口暴露给客户,不需要外部组件的转发,这里最重要的就是AddRef/Relase/queryinterface三个函数的处理,不复杂但过程比较繁琐,耐心点看看资料就行了
不能继承,可以采用聚集