Почему метод IHTMLImgElement put_src возвращает E_OUTOFMEMORY при вызове из потока?

У меня есть BHO (расширение Internet Explorer), и я пытаюсь установить «data: image / png; base64, [code]» (буфер кодированных изображений base64) в качестве источника IHTMLImgElement. Когда put_src вызывался из основного потока BHO, проблем не было, но теперь, когда я вызываю его из другого потока, он возвращает E_OUTOFMEMORY. Строка в кодировке base64 очень длинная. Для более короткой строки base64 ошибка не возвращается.

Я должен указать, что у меня нет утечек памяти, я использовал только умные COM-указатели и удалил всю выделенную память.

Также я использую тот же тип строки base64 для вызова set_backgroundImage для объектов IHTMLStyle, и он не возвращает ошибку.

1

Решение

Что конкретно означает «не защищенный поток»? Как я написал в
Главный пост вызов set_backgroundImage возвращается без проблем.

В этом контексте это просто означает, что вы не можете назвать это непосредственно из любого другого потока, кроме основного потока, где был создан ваш BHO. Если вам нужно использовать его из другого потока, выполните маршализацию объекта. IHTMLImgElement интерфейс к этой теме, например с CoMarshalInterThreadInterfaceInStream.

Больше информации:

1

Другие решения

Если объект IWebBrowser2 маршалируется в другой поток, строка, передаваемая методу put_src, должна быть BSTR, выделенным с помощью SysAllocString, а не простым LPWSTR.
Я получил ответ с другого форума.

1

По вопросам рекламы [email protected]