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:
Código
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:
Código
(si es muy estupido, todo long)
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
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