我有一个班级成员:
class MyNativeXPCOMObject ... {
...
private:
nsCOMPtr<nsISomeInterface> someInterface_;
...
};
我有方法可以做到这一点:
NS_IMETHODIMP MyNativeXPCOMObject::GetSomeObject(nsISomeInterface** aSomeInterface) {
NS_IF_ADDREF(someInterface_);
*aSomeInterface = someInterface_;
return NS_OK;
}
但Gecko 9强制要求您不允许在AddRef()
上拨打Release()
或nsCOMPtr<>
。所以现在我这样做:
NS_IMETHODIMP MyNativeXPCOMObject::GetSomeObject(nsISomeInterface** aSomeInterface) {
NS_IF_ADDREF(someInterface_.get()); // <--- Added .get()!
*aSomeInterface = someInterface_;
return NS_OK;
}
但直接访问原始指针让我觉得很脏。 AddRef()
在吸气剂中使用参数的正确方法是什么?
documentation没有帮助。
答案 0 :(得分:1)
您只需更改指令顺序:
*aSomeInterface = someInterface_;
NS_IF_ADDREF(*aSomeInterface);
*aSomeInterface
是一个原始指针,因此您可以使用NS_IF_ADDREF
。大多数Gecko代码似乎就是这样做的。