2010-10-31 50 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