diff options
| author | gingerBill <bill@gingerbill.org> | 2019-03-03 12:08:26 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2019-03-03 12:08:26 +0000 |
| commit | 9b4b20e8b11850dc1c0bbd6751e4d4fc2dc04c1a (patch) | |
| tree | 0ac45ba1a8041b10cf845db4d4eddd44cbdcc224 /core/dynlib | |
| parent | 76a6757ee9e838326519ffb30a81dc60667d253d (diff) | |
package dynlib
Diffstat (limited to 'core/dynlib')
| -rw-r--r-- | core/dynlib/lib.odin | 3 | ||||
| -rw-r--r-- | core/dynlib/lib_windows.odin | 24 |
2 files changed, 27 insertions, 0 deletions
diff --git a/core/dynlib/lib.odin b/core/dynlib/lib.odin new file mode 100644 index 000000000..66742b835 --- /dev/null +++ b/core/dynlib/lib.odin @@ -0,0 +1,3 @@ +package dynlib + +Library :: opaque rawptr; diff --git a/core/dynlib/lib_windows.odin b/core/dynlib/lib_windows.odin new file mode 100644 index 000000000..67ce47cc1 --- /dev/null +++ b/core/dynlib/lib_windows.odin @@ -0,0 +1,24 @@ +package dynlib + +import "core:sys/win32" +import "core:strings" + +load_library :: proc(path: string, global_symbols := false) -> (Library, bool) { + // NOTE(bill): 'global_symbols' is here only for consistency with POSIX which has RTLD_GLOBAL + + wide_path := win32.utf8_to_wstring(path, context.temp_allocator); + handle := cast(Library)win32.load_library_w(wide_path); + return handle, handle != nil; +} + +unload_library :: proc(library: Library) -> bool { + ok := win32.free_library(cast(win32.Hmodule)library); + return bool(ok); +} + +symbol_address :: proc(library: Library, symbol: string) -> (ptr: rawptr, found: bool) { + c_str := strings.new_cstring(symbol, context.temp_allocator); + ptr = win32.get_proc_address(cast(win32.Hmodule)library, c_str); + found == ptr != nil; + return; +} |