![](/img/trans.png)
[英]ISampleGrabber::GetCurrentBuffer() returns E_OUTOFMEMORY
[英]Why does IHTMLImgElement method put_src returns E_OUTOFMEMORY when called from thread?
我有一個BHO(Internet Explorer擴展),我正在嘗試將“ data:image / png; base64,[代碼]”(base64編碼的圖像緩沖區)設置為IHTMLImgElement的src。 當從BHO的主線程調用put_src時,沒有問題,但是現在我從其他線程調用它,它返回E_OUTOFMEMORY。 base64編碼的字符串很長。 對於較短的base64字符串,它不返回錯誤。
我必須指定我沒有內存泄漏,我只使用了智能COM指針,並刪除了所有已分配的內存。
另外,我使用相同類型的base64字符串為IHTMLStyle對象調用set_backgroundImage,並且它不返回錯誤。
它的具體含義是“線程不安全”? 正如我在主帖子中所寫,對set_backgroundImage的調用返回沒有問題。
在這種情況下,它僅表示您不能直接從創建BHO的主線程之外的任何其他線程直接調用它。 如果需要從另一個線程使用它,則將對象的IHTMLImgElement
接口IHTMLImgElement
到該線程,例如,使用CoMarshalInterThreadInterfaceInStream
。
更多信息:
如果將IWebBrowser2對象編組到另一個線程,則傳遞給put_src方法的字符串必須是分配有SysAllocString的BSTR,而不是簡單的LPWSTR。 我從另一個論壇得到了答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.