WinRT: merged with SDL 2.0.0 codebase (aka. SDL hg rev d4ce48ff30d1)

This commit is contained in:
David Ludwig
2013-08-12 22:29:55 -04:00
parent 1ad936eb29
commit f7049b93d5
66 changed files with 10152 additions and 2459 deletions

View File

@@ -20,21 +20,21 @@
*/
#include "SDL_config.h"
#ifdef __WIN32__
#if defined(__WIN32__) || defined(__WINRT__)
#include "SDL_error.h"
#include "SDL_windows.h"
#include "SDL_assert.h"
#include <objbase.h> /* for CoInitialize/CoUninitialize */
#include <objbase.h> /* for CoInitialize/CoUninitialize (Win32 only) */
/* Sets an error message based on GetLastError() */
int
WIN_SetError(const char *prefix)
WIN_SetErrorFromHRESULT(const char *prefix, HRESULT hr)
{
TCHAR buffer[1024];
char *message;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0,
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, 0,
buffer, SDL_arraysize(buffer), NULL);
message = WIN_StringToUTF8(buffer);
SDL_SetError("%s%s%s", prefix ? prefix : "", prefix ? ": " : "", message);
@@ -42,9 +42,24 @@ WIN_SetError(const char *prefix)
return -1;
}
/* Sets an error message based on GetLastError() */
int
WIN_SetError(const char *prefix)
{
return WIN_SetErrorFromHRESULT(prefix, GetLastError());
}
HRESULT
WIN_CoInitialize(void)
{
#ifdef __WINRT__
/* DLudwig: On WinRT, it is assumed that COM was initialized in main().
CoInitializeEx is available (not CoInitialize though), however
on WinRT, main() is typically declared with the [MTAThread]
attribute, which, AFAIK, should initialize COM.
*/
return S_OK;
#else
const HRESULT hr = CoInitialize(NULL);
/* S_FALSE means success, but someone else already initialized. */
@@ -54,12 +69,15 @@ WIN_CoInitialize(void)
}
return hr;
#endif
}
void
WIN_CoUninitialize(void)
{
#ifndef __WINRT__
CoUninitialize();
#endif
}
#endif /* __WIN32__ */