std/dynlib
Source EditЭтот модуль реализует возможность доступа к символам из динамически подключаемых библиотек. В POSIX для этого используется механизм dlsym, в Windows LoadLibrary.
Примеры
Загрузка простой C-функции
Следующий пример демонстрирует загрузку функции под названием greet из библиотеки, имя которой определяется во время выполнения на основе выбора языка. Если библиотека не загрузится или функция greet не найдена, программа завершается с ошибкой.
Пример:
import std/dynlib
type
GreetFunction = proc (): cstring {.gcsafe, stdcall.}
proc loadGreet(lang: string) =
let lib =
case lang
of "french":
loadLib("french.dll")
else:
loadLib("english.dll")
assert lib != nil, "Error loading library"
let greet = cast[GreetFunction](lib.symAddr("greet"))
assert greet != nil, "Error loading 'greet' function from library"
echo greet()
unloadLib(lib) Импорты
- strutils
Типы
Процедуры
proc loadLibPattern(pattern: string; globalSymbols = false): LibHandle {. ...raises: [Exception], tags: [RootEffect], forbids: [].}- Загружает библиотеку с именем, соответствующим
pattern, аналогично тому, что делает директиваdynlib. Возвращает nil, если библиотеку не удалось загрузить.Предупреждение: эта процедура использует сборщик мусора и поэтому не может быть использована для загрузки сборщика мусора.Source Edit
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/dynlib.html