1

我有一个 BHO(Internet Explorer 扩展),我正在尝试将“data:image/png;base64, [code]”(base64 编码的图像缓冲区)设置为 IHTMLImgElement 的 src。当从 BHO 的主线程调用 put_src 时,没有问题,但现在我从另一个线程调用它,它返回 E_OUTOFMEMORY。base64 编码的字符串很长。对于较短的 base64 字符串,它不会返回错误。

我必须指定我没有内存泄漏,我只使用了智能 COM 指针,并删除了所有分配的内存。

我也使用相同类型的 base64 字符串为 IHTMLStyle 对象调用 set_backgroundImage 并且它没有返回错误。

4

2 回答 2

1

它具体是什么意思“不是线程安全的”?正如我在主帖中所写,对 set_backgroundImage 的调用返回没有问题。

在这种情况下,它仅仅意味着您不能直接从任何其他线程调用它,除了创建 BHO 的主线程。如果您需要从另一个线程使用它,请将对象的IHTMLImgElement接口编组到该线程,例如使用CoMarshalInterThreadInterfaceInStream.

更多信息:

于 2014-03-03T14:12:50.080 回答
1

如果 IWebBrowser2 对象被编组到另一个线程,则传递给 put_src 方法的字符串必须是使用 SysAllocString 分配的 BSTR,而不是简单的 LPWSTR。我从另一个论坛得到了答案。

于 2014-03-06T13:59:07.847 回答