Re: [LAD] ladspa c++ dlsym question

From: Lars Luthman <lars.luthman@email-addr-hidden>
Date: Wed Nov 21 2007 - 13:00:23 EET

On Wed, 2007-11-21 at 02:57 +0000, james jwm-art net wrote:
> Hi,
>
> I'm attempting to use dlsym to dynamically load a ladspa plugin lib in
> c++. I've found various web pages describing how to use dlsym in c++
> but they do not seem entirely relevant to using ladspa (ie ladspa
> plugins are mainly written in c) (??).

The LADSPA interface is defined in terms of C structures and types, so
the language used to write the plugin doesn't matter to the loader.
dlsym() is what you use. Strictly speaking it should not work in a
standards-compliant compiler without some ugly tricks since casting void
pointers (which is what dlsym() returns) to function pointers is not
allowed in C++, but fortunatly most compilers are not that strict about
it.

If you really want your code to work in a strict compiler you can do
something like

union {
 void* in;
 LADSPA_Descriptor_Function out;
} foo;
foo.in = dlsym(lib_handle, "ladspa_descriptor");
LADSPA_Descriptor* descriptor = (*foo.out)(0);
...

which will not generate any errors, but _will_ invoke undefined
behaviour. It works on all platforms I've tried though.

--ll

_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev@email-addr-hidden
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev

Received on Wed Nov 21 16:15:01 2007

This archive was generated by hypermail 2.1.8 : Wed Nov 21 2007 - 16:15:02 EET