簡體   English   中英

從線程調用時,為什么IHTMLImgElement方法put_src返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM