user1492900
user1492900

Reputation: 575

Sharing data with a dynamically loaded library (dlopen,dlsym)

My main program would load a simple dynamic library called hello.so

In main


void* handle = dlopen("./hello.so", RTLD_LAZY);

In main , pass a callback function called testing (defined somewhere in main.h) and invoke the hello() from the dynamic library


typedef void (*callback)();
typedef void (*hello_t)( callback);

/* do something */

hello_t hello = (hello_t) dlsym(handle, "hello");
hello(testing);

In dynamic library,


#include 
#include "main.h"

extern "C" void hello( void (*fn)() ) {
  /*do something and then invoke callback function from main */  fn();
}


Are there other ways to allow functions/data of main to be called/used from dynamic library apart from using callbacks?

Upvotes: 3

Views: 1505

Answers (1)

Collin Dauphinee
Collin Dauphinee

Reputation: 13973

No, this is the preferred way of doing it, in my opinion. Any other way that I can think of involves making the DLL aware of the objects in the program it's linked with, which is most likely bad practice.

Regarding data, just a reminder though you didn't ask, it's usually best practice to copy any data that needs to be stored, if it's passed across library/program boundaries. You can get into a complete mess if you have the library using data whose lifetime is controlled by the program, and vice versa.

Upvotes: 2

Related Questions