SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Diodo en Jueves 12 de Octubre de 2006, 16:25

Título: Enlazando Explicitamente Una Dll
Publicado por: Diodo en Jueves 12 de Octubre de 2006, 16:25
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:
Título: Re: Enlazando Explicitamente Una Dll
Publicado por: Eternal Idol en Jueves 12 de Octubre de 2006, 16:55
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/ (http://www.codeguru.com/cpp/w-p/dll/importexportissues/article.php/c123/)
Título: Re: Enlazando Explicitamente Una Dll
Publicado por: Diodo en Jueves 12 de Octubre de 2006, 17:29
Gracias ¡ Le echare un ojo
Título: Re: Enlazando Explicitamente Una Dll
Publicado por: Diodo en Martes 17 de Octubre de 2006, 00:16
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:
Título: Re: Enlazando Explicitamente Una Dll
Publicado por: Eternal Idol en Martes 17 de Octubre de 2006, 00:19
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 ...