Firefox addon 如何添加一个nsCOMPtr作为out参数?
我班有一名成员:Firefox addon 如何添加一个nsCOMPtr作为out参数?,firefox-addon,smart-pointers,xpcom,reference-counting,geckosdk,Firefox Addon,Smart Pointers,Xpcom,Reference Counting,Geckosdk,我班有一名成员: class MyNativeXPCOMObject ... { ... private: nsCOMPtr<nsISomeInterface> someInterface_; ... }; 但是Gecko9强制您不允许在nsCOMPtrs上调用AddRef()或Release()。所以现在我要做的是: NS_IMETHODIMP MyNativeXPCOMObject::GetSomeObject(nsISomeInterface** aS
class MyNativeXPCOMObject ... {
...
private:
nsCOMPtr<nsISomeInterface> someInterface_;
...
};
但是Gecko9强制您不允许在nsCOMPtr
s上调用AddRef()
或Release()
。所以现在我要做的是:
NS_IMETHODIMP MyNativeXPCOMObject::GetSomeObject(nsISomeInterface** aSomeInterface) {
NS_IF_ADDREF(someInterface_.get()); // <--- Added .get()!
*aSomeInterface = someInterface_;
return NS_OK;
}
NS\u IMETHODIMP MyNativeXPCOMObject::GetSomeObject(nsSomeInterface**aSomeInterface){
NS_如果_ADDREF(someInterface_u.get());//您只需更改指令顺序:
*aSomeInterface = someInterface_;
NS_IF_ADDREF(*aSomeInterface);
*aSomeInterface
是一个原始指针,因此您可以在其上使用NS\u IF\u ADDREF
。大多数壁虎代码似乎就是这样做的。叹气。是的,这是显而易见的做法。:)
*aSomeInterface = someInterface_;
NS_IF_ADDREF(*aSomeInterface);