aboutsummaryrefslogtreecommitdiff
path: root/core/dynlib/lib.odin
Commit message (Collapse)AuthorAgeFilesLines
* Remove unneeded castsgingerBill2024-02-061-2/+2
|
* Clean up code for `initialize_symbols`gingerBill2024-02-061-24/+17
|
* Replace `core:*` to `base:*` where appropriategingerBill2024-01-281-2/+2
|
* Add hot reload support to `dynlib.initialize_symbols`Jeroen van Rijn2024-01-191-2/+10
|
* dynlib: add last_error procedureLaytan Laats2024-01-061-2/+17
|
* Add bool return to `dynlib.initialize_symbols`.Jeroen van Rijn2024-01-061-6/+5
|
* Add `dynlib.initialize_symbols` (#3071)Jeroen van Rijn2024-01-061-8/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ``` package example import "core:dynlib" import "core:fmt" Symbols :: struct { // `foo_` is prefixed, so we look for the symbol `foo_add`. add: proc "c" (int, int) -> int, // We use the tag here to override the symbol to look for, namely `bar_sub`. sub: proc "c" (int, int) -> int `dynlib:"bar_sub"`, // Exported global (if exporting an i32, the type must be ^i32 because the symbol is a pointer to the export.) // If it's not a pointer or procedure type, we'll skip the struct field. hellope: ^i32, // Handle to free library. // We can have more than one of these so we can match symbols for more than one DLL with one struct. _my_lib_handle: dynlib.Library, } main :: proc() { sym: Symbols // Load symbols from `lib.dll` into Symbols struct. // Each struct field is prefixed with `foo_` before lookup in the DLL's symbol table. // The library's Handle (to unload) will be stored in `sym._my_lib_handle`. This way you can load multiple DLLs in one struct. count := dynlib.initialize_symbols(&sym, "lib.dll", "foo_", "_my_lib_handle") defer dynlib.unload_library(sym._my_lib_handle) fmt.printf("%v symbols loaded from lib.dll (%p).\n", count, sym._my_lib_handle) if count > 0 { fmt.println("42 + 42 =", sym.add(42, 42)) fmt.println("84 - 13 =", sym.sub(84, 13)) fmt.println("hellope =", sym.hellope^) } } ```
* Document core:dynlibLucas Perlind2023-03-021-2/+81
|
* Add `#optional_ok` to `dynlib.symbol_address`gingerBill2022-05-251-1/+1
|
* Make `core:dynlib` use the private interface convention of other packagesgingerBill2022-05-251-0/+12
|
* Remove unneeded semicolons from the core librarygingerBill2021-08-311-1/+1
|
* Remove `#opaque` usage in core librarygingerBill2021-02-231-1/+1
|
* Deprecate `opaque` in favour of `#opaque` in the core librarygingerBill2020-12-041-1/+1
|
* package dynlibgingerBill2019-03-031-0/+3