Estoy haciendo un plugin para winamp... tengo el SDK (que en realidad no es muy explicativo, pero sirve)
En fin, es una DLL no ActiveX, hasta ahi todo en orden.
Para que el Winamp la tome como General Purpose Plugin, el nombre tiene que empezar con gen_xxxxxxx.dll y exportar "winampGetGeneralPurposePlugin".
Hasta aca sigue todo en orden, exporta eso y todo bien.
Referiendonos a esa funcion, debe devolver un puntero hacia una estructura que luego el Winamp recorre para obtener las direcciones de las 3 funciones principales: init, config y quit.
La estructura en C++ es asi:
typedef struct {
int version;
char *description;
int (*init)(); //me imagino que es un puntero a la funcion INIT
void (*config)(); //lo mismo, pero para config
void (*quit)(); //y para quit lo mismo
HWND hwndParent;
HINSTANCE hDllInstance;
} winampGeneralPurposePlugin;
y yo de alguna manera la traduci a VB6:
Public Type winampGeneralPurposePlugin
version As Long
descrpition As Long 'probe con String, pero igual explota
init As Long
config As Long
quit As Long
hwndParent As Long
hDllInstance As Long
End Type
(si es muy estupido, todo long)
Volviendo al tema, el Winamp llama a la direccion que le paso yo en Init, pero si esa funcion devuelve 0 (como deberia segun el SDK y otros plugins) el Winamp explota. Si devuelvo otro numero, tipo 1 o -1, el Winamp se encarga de descargar la DLL...
Ademas, description si le paso strptr() hace lo mismo.. nose donde puede estar el problema..
Por si preguntan, carga la dll, llama a las funciones y esta todo debugueado por eso les puedo asegurar que hasta que no retorna nada Init, funciona.
saludos