我正在使用IHTMLDocument2介面的一個實體來決議一些 HTML,如本文所述:
從 IPersistMoniker 加載需要很長時間才能加載無法決議的 URL
代碼比較簡單:
DelphiInterface<IHTMLDocument2> diDoc2;
HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, (LPVOID*)&diDoc2);
// Load and process HTML here and save into memory stream or to disk after the processing is done
完成后,我保存diDoc2上面新修改的 HTML 內容并將 HTML加載到TWebBrowser.
我是否可以
IHTMLDocument2直接將上面已經決議的內容“分配”給IHTMLDocument2包含在TWebBrowser. 我可以使用可能IHTMLDocument2.write或其他一些方法來這樣做,但是如果首先可能的話,可能會比簡單地將指標分配給已經初始化的物件會帶來一些性能損失。換句話說,我只是想“顯示”/“渲染”我剛剛在排序的“后臺緩沖區”中決議的內容。是否需要打電話
CoInitialize和打電話CoUninitialize之前和之后CoCreateInstance?我已經看到一些代碼可以做到這一點,但沒有它也能作業,除非 Delphi/C Builder 進行一些底層初始化。
uj5u.com熱心網友回復:
我用過IHTMLDocument2.write,看起來效果很好。
WideString HTML = "<html><body>test</body></html>";
if (diDoc)
{
// Creates a new one-dimensional array
SAFEARRAY *psaStrings = SafeArrayCreateVector(VT_VARIANT,0,1);
if (psaStrings)
{
VARIANT *param;
BSTR bstr = SysAllocString(HTML.c_bstr());
SafeArrayAccessData(psaStrings, (LPVOID*)¶m);
param->vt = VT_BSTR;
param->bstrVal = bstr;
SafeArrayUnaccessData(psaStrings);
diDoc->write(psaStrings);
diDoc->close();
// SafeArrayDestroy calls SysFreeString for each BSTR
//SysFreeString(bstr); // SafeArrayDestroy should be enough
SafeArrayDestroy(psaStrings);
return S_OK;
}
}
return E_FAIL;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/330940.html
標籤:德尔福 时间:2019-05-06 标签:c builder mshtml ihtml文档2 文件
下一篇:為什么FileAge回傳意外值?
