TCppWebBrowser 中没有默认接口
No DefaultInterface in TCppWebBrowser
我遇到了网络浏览器内存泄漏问题 - 我在这里发现了这个问题:
How can I hide WebBrowser till the website complete the loading / download process?
解决方案是使用browser.DefaultInterface.Document
代替browser.Document
。
我正在使用这个:
DelphiInterface<IHTMLDocument2> diDoc = browser->Document;
但我正在使用 TCppWebBrowser
,它只有 browser->DefaultDispatch
没有 DefaultInterface
像 TWebBrowser
我 假设 是同一件事,但我不知道如何查询 TCppWebBrowser 以获得 IHTMLDocument2
以避免内存泄漏,直到我完全切换到内存泄漏已修复的更新版本的 RAD Studio(悉尼,目前在 2010 年).
我试过这个:
DelphiInterface<IHTMLDocument2> diDoc;
browser->DefaultDispatch->QueryInterface(IID_IHTMLDocument2, &diDoc);
但这似乎不起作用。
这有效...但是...
DelphiInterface<IHTMLDocument2> diDoc = browser->DefaultDispatch;
但是生成的 diDoc 是 NULL。 (对于 browser->Document
也不是 NULL,它也是 _di_IDispatch
)
我想我自己解决了这个问题。而不是:
DelphiInterface<IHTMLDocument2> diDoc =
browser->Document;
我简单地使用了:
#include <SHDocVw.hpp> // required for Shdocvw::IWebBrowser2
#include "SHDocVw_OCX.h" // TCppWebBrowser
DelphiInterface<IHTMLDocument2> diDoc =
DelphiInterface<Shdocvw::IWebBrowser2>(browser->DefaultDispatch)->Document;
这似乎也有效:
DelphiInterface<IHTMLDocument2> diDoc =
DelphiInterface<Shdocvw::IWebBrowser2>(browser->Application)->Document;
或者:
DelphiInterface<IHTMLDocument2> diDoc = ((_di_IDispatch)browser->DefaultDispatch)->Document;
DelphiInterface<IHTMLDocument2> diDoc = ((_di_IDispatch)browser->Application)->Document;
内存泄漏似乎可以解决,就像上面答案中链接的 Delphi 等价物一样。
我遇到了网络浏览器内存泄漏问题 - 我在这里发现了这个问题: How can I hide WebBrowser till the website complete the loading / download process?
解决方案是使用browser.DefaultInterface.Document
代替browser.Document
。
我正在使用这个:
DelphiInterface<IHTMLDocument2> diDoc = browser->Document;
但我正在使用 TCppWebBrowser
,它只有 browser->DefaultDispatch
没有 DefaultInterface
像 TWebBrowser
我 假设 是同一件事,但我不知道如何查询 TCppWebBrowser 以获得 IHTMLDocument2
以避免内存泄漏,直到我完全切换到内存泄漏已修复的更新版本的 RAD Studio(悉尼,目前在 2010 年).
我试过这个:
DelphiInterface<IHTMLDocument2> diDoc;
browser->DefaultDispatch->QueryInterface(IID_IHTMLDocument2, &diDoc);
但这似乎不起作用。
这有效...但是...
DelphiInterface<IHTMLDocument2> diDoc = browser->DefaultDispatch;
但是生成的 diDoc 是 NULL。 (对于 browser->Document
也不是 NULL,它也是 _di_IDispatch
)
我想我自己解决了这个问题。而不是:
DelphiInterface<IHTMLDocument2> diDoc =
browser->Document;
我简单地使用了:
#include <SHDocVw.hpp> // required for Shdocvw::IWebBrowser2
#include "SHDocVw_OCX.h" // TCppWebBrowser
DelphiInterface<IHTMLDocument2> diDoc =
DelphiInterface<Shdocvw::IWebBrowser2>(browser->DefaultDispatch)->Document;
这似乎也有效:
DelphiInterface<IHTMLDocument2> diDoc =
DelphiInterface<Shdocvw::IWebBrowser2>(browser->Application)->Document;
或者:
DelphiInterface<IHTMLDocument2> diDoc = ((_di_IDispatch)browser->DefaultDispatch)->Document;
DelphiInterface<IHTMLDocument2> diDoc = ((_di_IDispatch)browser->Application)->Document;
内存泄漏似乎可以解决,就像上面答案中链接的 Delphi 等价物一样。