我的项目有两个接口IObjectContext和IObjectFactory。
使用Interface作为参数的一种方法是:
interface IObjectFactory: IDispatch{
[id(1)] HRESULT create([in] IObjectContext* context);
}
...
STDMETHODIMP CObjectFactory::create(IObjectContext* context)
{
CObjectContext *ctx= dynamic_cast<CObjectContext*>(context);
if(ctx!=NULL)
...
}
如果我没弄错的话,我在某处读到使用interface作为参数会导致安全问题。我不记得我在哪里读。
真的有可能吗? 可以将接口用作参数或不推荐使用吗?
欢迎收到文章。
答案 0 :(得分:2)
如果将指针作为参数传递给接口,则被调用者将引用实现该接口的对象,并可以自由存储指针并调用QueryInterface
以获取指向任何其他接口的指针由该对象实现。
安全隐含的是,如果您不信任被调用者不这样做,您希望传递一个代理对象来强制执行您需要的安全性约束(即不支持任何额外接口的QI,并且具有“关闭“撤销访问的方法”。
在您的代码中,您在接口指针上使用dynamic_cast<>
。
这通常是一个坏主意:
CObjectContext
的实施情况。如果是,则表示IObjectContext
缺少功能。