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);