This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
SDL_sysloadso.c
80 lines (65 loc) · 2.25 KB
1
2
/*
SDL - Simple DirectMedia Layer
3
Copyright (C) 1997-2010 Sam Lantinga
4
5
This library is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Lesser General Public
7
License as published by the Free Software Foundation; either
8
version 2.1 of the License, or (at your option) any later version.
9
10
11
12
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
Lesser General Public License for more details.
14
15
16
17
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
19
20
21
Sam Lantinga
slouken@libsdl.org
*/
22
#include "SDL_config.h"
23
24
#ifdef SDL_LOADSO_WINDOWS
25
26
27
28
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* System dependent library loading routines */
29
#include "../../core/windows/SDL_windows.h"
30
31
32
#include "SDL_loadso.h"
33
34
void *
SDL_LoadObject(const char *sofile)
35
{
36
37
38
LPTSTR tstr = WIN_UTF8ToString(sofile);
void *handle = (void *) LoadLibrary(tstr);
SDL_free(tstr);
39
40
41
/* Generate an error message if all loads failed */
if (handle == NULL) {
42
43
44
45
char errbuf[512];
SDL_strlcpy(errbuf, "Failed loading ", SDL_arraysize(errbuf));
SDL_strlcat(errbuf, sofile, SDL_arraysize(errbuf));
WIN_SetError(errbuf);
46
}
47
return handle;
48
49
}
50
51
void *
SDL_LoadFunction(void *handle, const char *name)
52
{
53
54
55
56
57
58
#ifdef _WIN32_WCE
LPTSTR tstr = WIN_UTF8ToString(name);
void *symbol = (void *) GetProcAddress((HMODULE) handle, tstr);
SDL_free(tstr);
#else
void *symbol = (void *) GetProcAddress((HMODULE) handle, name);
59
60
#endif
61
if (symbol == NULL) {
62
63
64
65
char errbuf[512];
SDL_strlcpy(errbuf, "Failed loading ", SDL_arraysize(errbuf));
SDL_strlcat(errbuf, name, SDL_arraysize(errbuf));
WIN_SetError(errbuf);
66
}
67
return symbol;
68
69
}
70
71
void
SDL_UnloadObject(void *handle)
72
{
73
74
75
if (handle != NULL) {
FreeLibrary((HMODULE) handle);
}
76
77
}
78
#endif /* SDL_LOADSO_WINDOWS */
80
/* vi: set ts=4 sw=4 expandtab: */