Cómo escribir un plugin LADSPA/ladspa.h
From JavierValcarce.Es
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.