#include "../../SDL_internal.h"
#ifdef SDL_LOADSO_WINDOWS
#include "../../core/windows/SDL_windows.h"
#include "SDL_loadso.h"
void *
SDL_LoadObject(const char *sofile)
{
void *handle;
LPTSTR tstr;
if (!sofile) {
SDL_InvalidParamError("sofile");
return NULL;
}
tstr = WIN_UTF8ToString(sofile);
#ifdef __WINRT__
handle = (void *) LoadPackagedLibrary(tstr, 0);
#else
handle = (void *) LoadLibrary(tstr);
#endif
SDL_free(tstr);
if (handle == NULL) {
char errbuf[512];
SDL_strlcpy(errbuf, "Failed loading ", SDL_arraysize(errbuf));
SDL_strlcat(errbuf, sofile, SDL_arraysize(errbuf));
WIN_SetError(errbuf);
}
return handle;
}
void *
SDL_LoadFunction(void *handle, const char *name)
{
void *symbol = (void *) GetProcAddress((HMODULE) handle, name);
if (symbol == NULL) {
char errbuf[512];
SDL_strlcpy(errbuf, "Failed loading ", SDL_arraysize(errbuf));
SDL_strlcat(errbuf, name, SDL_arraysize(errbuf));
WIN_SetError(errbuf);
}
return symbol;
}
void
SDL_UnloadObject(void *handle)
{
if (handle != NULL) {
FreeLibrary((HMODULE) handle);
}
}
#endif