Javier Valcarce's Personal Website

Cómo escribir un plugin LADSPA/ladspa.h

From JavierValcarce.Es

You are at: Cómo escribir un plugin LADSPA/ladspa.h
Jump to: navigation, search

Diferencias entre el fichero ladspa.h original y modificado

La declaración de la función ladspa_descriptor ahora contiene la macro EXPORT

EXPORT const LADSPA_Descriptor* ladspa_descriptor(unsigned long Index);

¿Cómo se exporta una función en una biblioteca dinámica?
En UNIX cualquier función no static es pública. Por tanto, la macro EXPORT se define como macro vacía, #define EXPORT

En Windows no basta con esto y hay que indicarlo expresamente, aunque hay varias maneras de hacerlo la más simple es usando atributos de función. La función exportada por la DLL debe ser importada por el host

  • En el plugin #define EXPORT __declspec(dllexport)
  • En el host #define EXPORT __declspec(dllimport)

Si queremos poner la declaración de la función en ladspa.h ¿cómo diferenciamos si estamos compilando el host o el plugin si ambos usan ladspa.h? Pues usando la macro BUILD_DLL que debe ser cierta al compilar el plugin y no el host.

Resumiendo, he añadido al principio del fichero las líneas

#ifdef WIN32
// Windows, dll exports, exe imports
#ifdef BUILD_DLL   
#define EXPORT __declspec(dllexport)
 
#else
#define EXPORT __declspec(dllimport)
#endif
 
#else 
//UNIX, nothing
#define EXPORT 
#endif

el resto del fichero es igual.