wxWidgets/include/wx/msw/rt/utils.h
Tobias Taschner 72db8a6265 Add basic support to use WinRT APIs.
Some Windows8+ APIs are only accessible via WinRT which is based on COM. However there are a few dependencies to get to the interfaces via functions defined in roapi.h. Using RoInitialize, RoUninitialize, etc. directly from it's windows headers adds dependencies to the WinRT dlls leaving the resulting exe unable to launch on earlier Windows versions. The wxWinRT functions wrap this with dynamic loading. Additionally wxWinRT::TempStringRef adds a convenient wrapper to HSTRING which is used extensively in WinRT APIs.
2016-02-10 20:38:11 +01:00

85 lines
1.8 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: wx/msw/rt/utils.h
// Purpose: Windows Runtime Objects helper functions and objects
// Author: Tobias Taschner
// Created: 2015-09-05
// Copyright: (c) 2015 wxWidgets development team
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_MSW_RTUTILS_H
#define _WX_MSW_RTUTILS_H
#include "wx/defs.h"
#if wxUSE_WINRT
#include "wx/string.h"
#include "wx/msw/wrapwin.h"
#include <winstring.h>
namespace wxWinRT
{
bool WXDLLIMPEXP_CORE IsAvailable();
bool WXDLLIMPEXP_CORE Initialize();
void WXDLLIMPEXP_CORE Uninitialize();
bool WXDLLIMPEXP_CORE GetActivationFactory(const wxString& activatableClassId, REFIID iid, void ** factory);
// RAII class initializing WinRT in its ctor and undoing it in its dtor.
class WXDLLIMPEXP_CORE Initializer
{
public:
Initializer()
: m_ok(Initialize())
{
}
bool IsOk() const
{
return m_ok;
}
~Initializer()
{
if (m_ok)
Uninitialize();
}
private:
const bool m_ok;
wxDECLARE_NO_COPY_CLASS(Initializer);
};
// Simple class to convert wxString to HSTRING
// This just wraps a reference to the wxString object,
// which needs a life time greater than the TempStringRef object
class WXDLLIMPEXP_CORE TempStringRef
{
public:
HSTRING Get() const { return m_hstring; }
operator HSTRING() const { return m_hstring; };
static const TempStringRef Make(const wxString &str);
private:
TempStringRef(const wxString &str);
HSTRING m_hstring;
HSTRING_HEADER m_header;
wxDECLARE_NO_COPY_CLASS(TempStringRef);
};
} // namespace wxWinRT
#endif // wxUSE_WINRT
#endif // _WX_MSW_RTUTILS_H