Почему функция Win32 OleGetClipboard () возвращает CLIPBRD_E_CANT_OPEN? - PullRequest
3 голосов
/ 26 сентября 2008

При каких обстоятельствах функция Win32 API OleGetClipboard () завершится с ошибкой и вернет CLIPBRD_E_CANT_OPEN?

Дополнительные сведения: я помогаю с исправлением ошибки в Firefox. Подробности здесь:

ошибка 444800 - невозможно получить данные изображения из буфера обмена в формате без потерь

В автоматизированном тесте, который я помогал написать, мы видим, что OleGetClipboard () иногда дает сбой и возвращает CLIPBRD_E_CANT_OPEN. Это неожиданно, и код Firefox для извлечения данных изображений из буфера обмена Windows зависит от того, успешно ли выполнен этот вызов.

Ответы [ 3 ]

5 голосов
/ 26 сентября 2008

В документации сказано, что OleGetClipboard может не работать с этим кодом ошибки, если OpenClipboard не удается. В свою очередь, если вы читаете эту документацию, там написано:

" OpenClipboard завершается ошибкой, если в другом окне открыт буфер обмена."

Это эксклюзивный ресурс: буфер обмена может быть открыт только в одном окне одновременно. По сути, если вы не можете этого сделать, подождите немного и попробуйте снова.

0 голосов
/ 26 сентября 2008

Из того, что я вижу в MSDN, похоже, что проблема возникает из-за того, кто пытался фактически поместить данные в в буфер обмена, т.е. источник данных. Если по какой-либо причине их вызов OleSetClipboard () не удался, вы не сможете извлечь что-то из этого. Я хотел бы взглянуть на то, как данные помещаются в буфер обмена, и посмотреть, есть ли тестовый случай, который выполняет это (копирование данных в буфер обмена), а затем вызывает проблему, о которой вы говорите.

0 голосов
/ 26 сентября 2008

Ваш тест выполняется через службы терминалов? См. CLIPBRD_E_CANT_OPEN ошибка при настройке буфера обмена из .NET .

...