Цель : получение содержимого из буфера обмена с помощью 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.
Искренне благодарю вас за помощь. Спасибо.