|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2022 - Raw Material Software Limited
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- The code included in this file is provided under the terms of the ISC license
- http://www.isc.org/downloads/software-support-policy/isc-license. Permission
- To use, copy, modify, and/or distribute this software for any purpose with or
- without fee is hereby granted provided that the above copyright notice and
- this permission notice appear in all copies.
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
- */
-
- namespace juce
- {
-
- WinRTWrapper::WinRTWrapper()
- {
- winRTHandle = ::LoadLibraryA ("api-ms-win-core-winrt-l1-1-0");
-
- if (winRTHandle == nullptr)
- return;
-
- roInitialize = (RoInitializeFuncPtr) ::GetProcAddress (winRTHandle, "RoInitialize");
- createHString = (WindowsCreateStringFuncPtr) ::GetProcAddress (winRTHandle, "WindowsCreateString");
- deleteHString = (WindowsDeleteStringFuncPtr) ::GetProcAddress (winRTHandle, "WindowsDeleteString");
- getHStringRawBuffer = (WindowsGetStringRawBufferFuncPtr) ::GetProcAddress (winRTHandle, "WindowsGetStringRawBuffer");
- roActivateInstance = (RoActivateInstanceFuncPtr) ::GetProcAddress (winRTHandle, "RoActivateInstance");
- roGetActivationFactory = (RoGetActivationFactoryFuncPtr) ::GetProcAddress (winRTHandle, "RoGetActivationFactory");
-
- if (roInitialize == nullptr || createHString == nullptr || deleteHString == nullptr
- || getHStringRawBuffer == nullptr || roActivateInstance == nullptr || roGetActivationFactory == nullptr)
- return;
-
- HRESULT status = roInitialize (1);
- initialised = ! (status != S_OK && status != S_FALSE && status != 0x80010106L);
- }
-
- WinRTWrapper::~WinRTWrapper()
- {
- if (winRTHandle != nullptr)
- ::FreeLibrary (winRTHandle);
-
- clearSingletonInstance();
- }
-
- WinRTWrapper::ScopedHString::ScopedHString (String str)
- {
- if (WinRTWrapper::getInstance()->isInitialised())
- WinRTWrapper::getInstance()->createHString (str.toWideCharPointer(),
- static_cast<uint32_t> (str.length()),
- &hstr);
- }
-
- WinRTWrapper::ScopedHString::~ScopedHString()
- {
- if (WinRTWrapper::getInstance()->isInitialised() && hstr != nullptr)
- WinRTWrapper::getInstance()->deleteHString (hstr);
- }
-
- String WinRTWrapper::hStringToString (HSTRING hstr)
- {
- if (isInitialised())
- if (const wchar_t* str = getHStringRawBuffer (hstr, nullptr))
- return String (str);
-
- return {};
- }
-
-
- JUCE_IMPLEMENT_SINGLETON (WinRTWrapper)
-
- }
|