为什么IHTMLImgElement方法put_src在从线程调用时返回E_OUTOFMEMORY?

时间:2014-03-03 09:02:27

标签: c++ multithreading internet-explorer bho ihtmlimgelement

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

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

此外,我使用相同类型的base64字符串为IHTMLStyle对象调用set_backgroundImage,并且它不返回任何错误。

2 个答案:

答案 0 :(得分:1)

  

具体是什么意思“不是线程安全的”?就像我写的那样   main post对set_backgroundImage的调用返回没有问题。

在这种情况下,它只是意味着你不能从任何其他线程直接中调用它,而是创建BHO的主线程。如果您需要从另一个线程使用它,请将对象的IHTMLImgElement接口封送到该线程,例如与CoMarshalInterThreadInterfaceInStream

更多信息:

答案 1 :(得分:1)

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