dl.pp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. unit dl;
  2. interface
  3. const
  4. {$ifdef BSD} // dlopen is in libc on FreeBSD.
  5. LibDL = 'c';
  6. {$else}
  7. LibDL = 'dl';
  8. {$endif}
  9. {$if defined(linux) and defined(cpuarm)}
  10. { arm-linux seems to require this }
  11. {$linklib c}
  12. {$endif}
  13. RTLD_LAZY = $001;
  14. RTLD_NOW = $002;
  15. RTLD_BINDING_MASK = $003;
  16. RTLD_GLOBAL = $100;
  17. RTLD_NEXT = pointer(-1);
  18. {$ifdef LINUX}
  19. RTLD_DEFAULT = nil;
  20. {$endif}
  21. {$ifdef BSD}
  22. RTLD_DEFAULT = pointer(-2);
  23. RTLD_MODEMASK = RTLD_BINDING_MASK;
  24. {$endif}
  25. type
  26. Pdl_info = ^dl_info;
  27. dl_info =
  28. record
  29. dli_fname : Pchar;
  30. dli_fbase : pointer;
  31. dli_sname : Pchar;
  32. dli_saddr : pointer;
  33. end;
  34. function dlopen(Name : PChar; Flags : longint) : Pointer; cdecl; external libdl;
  35. function dlsym(Lib : Pointer; Name : Pchar) : Pointer; cdecl; external Libdl;
  36. function dlclose(Lib : Pointer) : Longint; cdecl; external libdl;
  37. function dlerror() : Pchar; cdecl; external libdl;
  38. { overloaded for compatibility with hmodule }
  39. function dlsym(Lib : PtrInt; Name : Pchar) : Pointer; cdecl; external Libdl;
  40. function dlclose(Lib : PtrInt) : Longint; cdecl; external libdl;
  41. function dladdr(Lib: pointer; info: Pdl_info): Longint; cdecl; external;
  42. implementation
  43. end.