2010-10-31 30 views
3

我正在爲C#中的Internet Explorer編寫瀏覽器助手對象(BHO)!我可以使用C++從C#BHO遍歷DOM嗎?

我想查找DOM中的文本節點,這需要我遍歷整個DOM樹,如果我想區分文本節點和其他類型的節點。這在C#中被認爲是耗時的,但在C++(?)中應該幾乎是瞬間的。

有沒有辦法在C++中進行遍歷呢?我可以從C#調用DLL,使用DllImport?將HTMLDocument傳遞給我的外部公開的C++方法很容易嗎?

還有其他想法嗎?

乾杯!

+0

只需在C++中編寫整個BHO? – 2010-10-31 18:18:59

+0

我有很多其他的邏輯已經寫在C#.. – nelshh 2010-10-31 18:34:24

回答

2

你從哪裏得到「應該從」?大部分時間將花在實現DOM的代碼上。這是用微軟的C++編寫的。

Marshal.GetIUnknownForObject()爲您提供一個原始接口指針,您可以將其傳遞給本機代碼。它需要QI指向IHtmlDocument2的指針並從那裏取出它。

+0

http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx和http://blogs.msdn.com/ b/ieinternals/archive/2009/08/21/agcore-addon-hangs-internet-explorer.aspx是我爲什麼不寫BHO的託管代碼的來源。我預計egrunin也是如此。 – 2011-06-06 13:32:47

+0

CLR版本注入問題與perf無關。在.NET 4.0 btw中解決。 – 2011-06-07 00:16:49

0
推測這是耗時在C#中,

這是錯誤的。

大部分用戶的時間將用於等待HTML到達瀏覽器,並讓瀏覽器在屏幕上繪製它。相比之下,漫步DOM(任何語言)都很簡單。

+0

由於編組,導致DOM漫遊非常緩慢。例如,這就是爲什麼Skype工具欄會損害性能的原因之一。但是C#比C++慢得多的觀點並不正確。 – EricLaw 2010-11-01 13:42:26

+0

我們都是對的。我寫了大量的代碼,使用C++,VB和C#來遍歷DOM,大部分但不是全部使用BHO。是的,這需要時間,是的,C++不會明顯比其他人快,無疑是您引用的原因。 – egrunin 2010-11-01 13:51:06