为什么 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,[code]"(base64编码图像缓冲区)作为IHTMLImgElement的src。当从 BHO 的主线程调用 put_src 时,没有问题,但现在我从不同的线程调用它,它返回E_OUTOFMEMORY。base64 编码的字符串很长。对于较短的 base64 字符串,它不会返回任何错误。
我必须指定我没有内存泄漏,我只使用了智能COM指针,并删除了所有分配的内存。
此外,我使用相同类型的base64字符串为IHTMLStyle对象调用set_backgroundImage,并且它没有返回任何错误。
在这种情况下,它"不安全"的具体含义是什么?正如我在 主要发布呼叫set_backgroundImage返回没有问题。
只是意味着您不能直接从任何其他线程调用它,而是创建 BHO 的主线程。如果您需要从另一个线程使用它,请将对象的IHTMLImgElement
接口封送到该线程,例如使用 CoMarshalInterThreadInterfaceInStream
.
更多信息:
如何在可视C++中跨公寓封送界面
OLE 线程模型的描述和工作原理
如果将 IWebBrowser2 对象封送到另一个线程,则传递给put_src方法的字符串必须是使用 SysAllocString 分配的 BSTR,而不是简单的 LPWSTR。 我从另一个论坛得到了答案。
相关文章:
- 如何安全地从 DLL 调用返回对象
- 类对象属性是否可以调用返回属性应具有的值的方法C++?
- 从类似构造函数的调用返回模板化智能指针
- C ++ DLL导入:函数调用返回错误的结果
- 如何调用返回类方法指针的类方法
- 如何调用返回双精度或字符串并将其保存在地图上但作为对象的类的方法
- FindResource 调用返回 RCDATA 类型的文本文件的 NULL
- 如何调用返回指针数组的函数?C++
- Perl xs - 无法从方法调用返回新的自定义 C++ 对象 - 改为返回标量值
- BOOST ::线程内会成员功能调用返回unique_lock Instantiation错误
- 断言调用返回的函数的签名 &(引用)
- 对于相同的输入参数,多个函数调用返回不同的结果
- 如何调用返回后删除[]内存
- 使用二维数组调用返回结构
- C++:声明、定义和调用返回模板类对象的函数
- 调用返回数组的函数
- c++方法从c#dllimport调用返回0
- 方法调用返回空值
- 我希望计时器只在上一个调用返回或完成执行时调用代码
- 任何时间函数保证为调用返回不同的值