| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 
							- extern "C" EXPORT void winrt_initialize()
 
- {
 
- 	winrt::init_apartment(winrt::apartment_type::multi_threaded);
 
- }
 
- extern "C" EXPORT void winrt_uninitialize()
 
- {
 
- 	winrt::uninit_apartment();
 
- }
 
- static winrt::Windows::System::DispatcherQueueController CreateDispatcherQueueController()
 
- {
 
- 	DispatcherQueueOptions options{sizeof(DispatcherQueueOptions), DQTYPE_THREAD_CURRENT, DQTAT_COM_STA};
 
- 	winrt::Windows::System::DispatcherQueueController controller{nullptr};
 
- 	winrt::check_hresult(CreateDispatcherQueueController(
 
- 		options,
 
- 		reinterpret_cast<ABI::Windows::System::IDispatcherQueueController **>(winrt::put_abi(controller))));
 
- 	return controller;
 
- }
 
- struct winrt_disaptcher {
 
- 	winrt::Windows::System::DispatcherQueueController controller{nullptr};
 
- };
 
- extern "C" EXPORT struct winrt_disaptcher *winrt_dispatcher_init()
 
- {
 
- 	struct winrt_disaptcher *dispatcher = NULL;
 
- 	try {
 
- 		if (winrt::Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent(
 
- 			    L"Windows.Foundation.UniversalApiContract", 5)) {
 
- 			winrt::Windows::System::DispatcherQueueController controller =
 
- 				CreateDispatcherQueueController();
 
- 			dispatcher = new struct winrt_disaptcher;
 
- 			dispatcher->controller = std::move(controller);
 
- 		}
 
- 	} catch (const winrt::hresult_error &err) {
 
- 		blog(LOG_ERROR, "winrt_dispatcher_init (0x%08X): %s", (int32_t)err.code(),
 
- 		     winrt::to_string(err.message()).c_str());
 
- 	} catch (...) {
 
- 		blog(LOG_ERROR, "winrt_dispatcher_init (0x%08X)", (int32_t)winrt::to_hresult());
 
- 	}
 
- 	return dispatcher;
 
- }
 
- extern "C" EXPORT void winrt_dispatcher_free(struct winrt_disaptcher *dispatcher)
 
- try {
 
- 	delete dispatcher;
 
- } catch (const winrt::hresult_error &err) {
 
- 	blog(LOG_ERROR, "winrt_dispatcher_free (0x%08X): %s", (int32_t)err.code(),
 
- 	     winrt::to_string(err.message()).c_str());
 
- } catch (...) {
 
- 	blog(LOG_ERROR, "winrt_dispatcher_free (0x%08X)", (int32_t)winrt::to_hresult());
 
- }
 
 
  |