 25bd5d8adb
			
		
	
	25bd5d8adb
	
	
	
		
			
			subrepo: subdir: "deps/juce" merged: "b13f9084e" upstream: origin: "https://github.com/essej/JUCE.git" branch: "sono6good" commit: "b13f9084e" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596"
		
			
				
	
	
		
			83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|   ==============================================================================
 | |
| 
 | |
|    This file is part of the JUCE library.
 | |
|    Copyright (c) 2020 - 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)
 | |
| 
 | |
| }
 |