• Sábado 14 de Diciembre de 2024, 20:45

Autor Tema:  Enlazando Explicitamente Una Dll  (Leído 1633 veces)

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Enlazando Explicitamente Una Dll
« en: Jueves 12 de Octubre de 2006, 16:25 »
0
Hola a todos.

Tengo que hacer una libreria dinamica en c++ , que estara compuesta por diferentes clases. La forma de programar la dll la tengo mas o menos clara. Ahora bien, no se como enlazar dinamicamente (explicitamente o en tiempo de ejecucion) la dll en la aplicacion. Se que tengo que usar LoadLibrary pasandole la ruta de la dll y luego obtener con GetProcAddress un puntero a la direccion en memoria de la funcion que quiera usar de la dll. Algo asi

Código: Text
  1. HINSTANCE hDLL;               // Handle to DLL
  2. LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
  3. DWORD dwParam1;
  4. UINT  uParam2, uReturnVal;
  5.  
  6. hDLL = LoadLibrary("MyDLL");
  7. if (hDLL != NULL)
  8. {
  9.    lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
  10.                                            "DLLFunc1");
  11.    if (!lpfnDllFunc1)
  12.    {
  13.       // handle the error
  14.       FreeLibrary(hDLL);
  15.       return SOME_ERROR_CODE;
  16.    }
  17.    else
  18.    {
  19.       // call the function
  20.       uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
  21.    }
  22. }
  23.  

Pero yo quiero exportar la clase completa y no solamente una funcion. He probado usando las mismas funciones y a GetProcAddress pasarle el nombre de la clase, pero no funciona

¿Alguien sabe como se hace para recoger clases de una dll en tiempo de ejecucion?

Gracias anticipadas  

salu2 :hola:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Enlazando Explicitamente Una Dll
« Respuesta #1 en: Jueves 12 de Octubre de 2006, 16:55 »
0
Tal vez puedas lograr hacerlo pero depende mucho del proyecto en cuestion, aca tenes formas que podes intentar usar:

http://www.codeguru.com/cpp/w-p/dll/import...ticle.php/c123/

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.


Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Enlazando Explicitamente Una Dll
« Respuesta #3 en: Martes 17 de Octubre de 2006, 00:16 »
0
Hola de nuevo.

He estado mirando ese link , y la verdad, no me parece muy buena solucion ya que hay que tener un typedef de un puntero a cada funcion (metodo) de las clases ( vamos que es un engorro).

He estado curioseando un poco mas y parece que ademas que ese metodo se basa en algo parecido a lo que hacen los objetos COM. Si no me equivoco son como una interface a dlls o exes para poder acceder a sus funciones. Pero todavia no tengo nada claro que son, ni para que se utilizan. ¿Podrian valer para lo mismo que una dll y poder cargar las clases dicamicamente?

Bueno espero no haber dicho muchas burradas, aunque quizas sea lo que este buscando ...

salu2  :hola:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Enlazando Explicitamente Una Dll
« Respuesta #4 en: Martes 17 de Octubre de 2006, 00:19 »
0
Desde ya todo lo que puedas hacer son como dicen en España "apaños" o "chapuzas", las DLLs no estan diseñadas para C++ sino para C ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.