Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: el_c0c0 en 31 Marzo 2009, 00:34 am



Título: problema al pasar una struct de C++
Publicado por: el_c0c0 en 31 Marzo 2009, 00:34 am
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:
Código
  1. typedef struct {
  2. int version;
  3. char *description;
  4. int (*init)();        //me imagino que es un puntero a la funcion INIT
  5. void (*config)(); //lo mismo, pero para config
  6. void (*quit)();    //y para quit lo mismo
  7. HWND hwndParent;
  8. HINSTANCE hDllInstance;
  9. } winampGeneralPurposePlugin;

y yo de alguna manera la traduci a VB6:
Código
  1. Public Type winampGeneralPurposePlugin
  2.    version As Long
  3.    descrpition As Long 'probe con String, pero igual explota
  4.    init As Long
  5.    config As Long
  6.    quit As Long
  7.    hwndParent As Long
  8.    hDllInstance As Long
  9. 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