我正在致力於Firefox的C++組件,並且我試圖圍繞XPCOM及其所有部件進行思考。這真是令人困惑,所以我試圖通過它,但我試圖穿過一個頁面,並獲得它的所有鏈接。我試圖弄清楚所有對象都做了什麼。所以,如果我有這樣的接口:步行通過一個nsIDOMNodeList
interface nsIPageSummary : nsISupports {
boolean saveSummary(in nsIDOMDocument document,
out unsigned long numLinks,
out unsigned long numImages);
};
在IDL定義,在我的C方法++代碼是這樣:
SaveSummary(nsIDOMDocument* inDoc, PRBool* outSuccess)
{
*outSuccess = PR_FALSE;
nsCOMPtr<nsIDOMNodeList> nodeList;
inDoc->GetElementsByTagName(NS_LITERAL_STRING("A"), getter_AddRefs(nodeList));
}
我知道C++方法需要更多的參數與一個匹配在界面中定義,但我不明白所有的打字工作如何。就實際列表而言,我是否理解
inDoc->GetElementsByTagName(NS_LITERAL_STRING("A"), getter_AddRefs(nodeList));
行將所有來自inDoc的「A」標記放入nodeList?我只需要通過nodeList來獲取它們全部?
我將如何引用NodeList中的每個元素?我只是做 nodeList - > Item(i) – Aeonstrife
@Aeonstrife:'rv = nodeList-> Item(i,getter_AddRefs(node))' - 當從C++調用時,返回值總是轉換爲附加參數。而XPCOM方法的「實際」返回值始終是'nsresult'。 –