Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2015-04

load a library twice

2 messages · 2 people ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Xiangrong Fang

Hi All,

Is the following correct:

var
  h1, h2: TLibHandle;
  lib1, lib2: string;
begin
  lib1 := 'library.so';
  lib2 := 'library.so';
  h1 := LoadLibrary(lib1);
  h2 := LoadLibrary(lib2);
end.

The reason I need this is that I would like to keep the possibility to provide different group of functions in the same or two different libraries. For example, lib1 provides function A, lib2 provide function B, or, lib3 provide both function A and B.

If I open the same library via 2 different handles, are they actually pointing to the same memory address internally, so that if I UnloadLibrary, it will cause something like access violation in the second call?

Thanks!

Xiangrong

Anthony Walter
to Xiangrong Fang

Both the Windows LoadLibrary/FreeLibrary and Unix style dlopen/dlclose function internally use a reference counting system to load and unload dll/shared object (dynamic library) files.

This means that it is safe to call LoadLibrary twice, and FreeLibrary once whilst keeping the a library loading. It's only when the load/unload counts match when a dynamic library will be unloaded.

So to answer you question, yes it's okay.