0

クラスのメンバーがいます:

class MyNativeXPCOMObject ... {
    ...
private:
    nsCOMPtr<nsISomeInterface> someInterface_;
    ...
};

私はこれを行う方法があります:

NS_IMETHODIMP MyNativeXPCOMObject::GetSomeObject(nsISomeInterface** aSomeInterface) {
    NS_IF_ADDREF(someInterface_);
    *aSomeInterface = someInterface_;
    return NS_OK;
}

AddRef()しかし、Gecko 9は、あなたが電話をかけたり、電話をかけたりRelease()することを許可されていないことを強制しますnsCOMPtr<>。だから今私はこれをやっています:

NS_IMETHODIMP MyNativeXPCOMObject::GetSomeObject(nsISomeInterface** aSomeInterface) {
    NS_IF_ADDREF(someInterface_.get());  // <--- Added .get()!
    *aSomeInterface = someInterface_;
    return NS_OK;
}

しかし、生のポインタに直接アクセスすると、私は汚く感じます。AddRef()ゲッターでパラメーターを出力するための適切な方法は何ですか?

ドキュメントは役に立ちませんでした。

4

1 に答える 1

1

命令の順序を変更するだけです。

*aSomeInterface = someInterface_;
NS_IF_ADDREF(*aSomeInterface);

*aSomeInterfaceは生のポインタなので、使用できますNS_IF_ADDREF。ほとんどの Gecko コードがそうしているようです。

于 2011-12-14T08:28:58.443 に答える