FreeBASIC  0.91.0
hdynload.c
Go to the documentation of this file.
1 /* Internal dynamic library functions loading */
2 
3 #include "../fb.h"
4 #include "../fb_private_hdynload.h"
5 
6 #define hDylibFree( lib ) FreeLibrary( lib )
7 #define hDylibSymbol( lib, sym ) GetProcAddress( lib, sym )
8 
9 FB_DYLIB fb_hDynLoad(const char *libname, const char **funcname, void **funcptr)
10 {
11  FB_DYLIB lib;
12  ssize_t i;
13 
14  if (!(lib = LoadLibrary(libname)))
15  return NULL;
16 
17  /* Load functions */
18  for (i = 0; funcname[i]; i++) {
19  funcptr[i] = hDylibSymbol(lib, funcname[i]);
20  if (!funcptr[i]) {
21  hDylibFree(lib);
22  return NULL;
23  }
24  }
25 
26  return lib;
27 }
28 
29 int fb_hDynLoadAlso( FB_DYLIB lib, const char **funcname, void **funcptr, ssize_t count )
30 {
31  ssize_t i;
32 
33  /* Load functions */
34  for (i = 0; i < count; i++) {
35  funcptr[i] = hDylibSymbol(lib, funcname[i]);
36  if (!funcptr[i])
37  return -1;
38  }
39 
40  return 0;
41 }
42 
44 {
45  if (*lib) {
46  hDylibFree( *lib );
47  *lib = NULL;
48  }
49 }