При получении содержимого из буфера обмена появляется сообщение об ошибке «Приложение называется интерфейсом, который был назначен для другого потока». - PullRequest
0 голосов
/ 02 мая 2020

Цель : получение содержимого из буфера обмена с помощью C ++ / WinRT API.

Проблема :

Поскольку я только тестирую этот API, я попытался написать простое консольное приложение с методом блокировки get() в асинхронном буфере обмена c получатель текста. Однако я получаю «Приложение, называемое интерфейсом, который был упорядочен для другого потока» ошибка при отладке. Я также пытался инициализировать апартаменты как однопотоковые (STA), но, по-моему, это не разрешено, поскольку выдается еще одна ошибка утверждения (!is_sta()). Теперь мне просто интересно, почему эта ошибка выдается при вызове get и как извлечь содержимое из буфера обмена в моем консольном приложении. (Я видел некоторые примеры (в основном GUI приложений), использующие сопрограммы, с которыми я не знаком.)

Код :

using namespace winrt::Windows::ApplicationModel::DataTransfer;

int main()
{
    init_apartment();

    hstring text{ Clipboard::GetContent().GetTextAsync().get() };
    std::wcout << text.c_str() << std::endl;
}

Сообщение об ошибке :

Exception thrown at 0x7659ACC2 (KernelBase.dll) in test-clipboard.exe: WinRT originate error - 0x8001010E : 'The application called an interface that was marshalled for a different thread.'.
'test-clipboard.exe' (Win32): Loaded 'C:\Windows\SysWOW64\bcrypt.dll'. 
Exception thrown at 0x7659ACC2 in test-clipboard.exe: Microsoft C++ exception: winrt::hresult_wrong_thread at memory location 0x010FF818.
Unhandled exception at 0x7659ACC2 in test-clipboard.exe: Microsoft C++ exception: winrt::hresult_wrong_thread at memory location 0x010FF818.

Искренне благодарю вас за помощь. Спасибо.

1 Ответ

0 голосов
/ 02 мая 2020

API буфера обмена WinRT могут вызываться только из потока пользовательского интерфейса с CoreWindow. См. Примечания В документации . Вы можете просто использовать обычные API буфера обмена Win32 в своем консольном приложении.

...