Ver Mensaje Individual
  #17 (permalink)  
Antiguo 16/05/2006, 18:26
Nivel7
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 6 meses
Puntos: 2
Despues de ver la pregunta de Instru he estado probamdo esto de las Dlls, la ligadura temprana de Dlls, (o estatica como se llame), me funciona muy bien, pero al ligadura por LoadLibrary, no funciona para nada, me marca un acceso invalido a memoria.

se me ocurrio que podia hacer algo para solucionar el problema planteado por Instru, pero si no logro hacer funcionar LoadLibrary y GetProcAddress sera dificil.

Mi planteamiento es este:

Hacer una Dll y su respectiva libreria estatica, en esta se declarara una clase abstracta, es decir una clase con funciones virtuales puras, a manera de interfaz.

esta libreria se incluira en el ejecutable para tener un puntero de la clase abstracta.
esta libreia tambien se usara para crear las Dlls, que en el futuro, se utilizaran para dar diferentes comportamientos al programa.

en estas otras Dlls, se declararan objetos deribados de la clase abstracta y a traves de una funcion se mandara un puntero de esta clase al programa.

esto se haria con las funciones LoadLibrary y GetProcAddresss.

El funcionamiento de esto se basa en el polimorfismo.
es decir a travez de un puntero a clase base se accedes a funciones mienbro de clases derivadas.

por tanto siempre y cuando las clases nuevas contenidas en las Dlls, implementen la interfas(Clase abstracta), se le podra dar diferentes comportamientos al programa que use esta clase.(a travez del puntero en la Dll base).

Alguien a trabajado con LoadLibrary y GetProcAddress??

por que me marcara error de acceso??

Este es un programa basico en el que intento llamar una simple funcion y no lo logro, que esta ra mal??:

#include <windows.h>

typedef void(*PF)();

int main()
{
HINSTANCE hDll = LoadLibrary("MiDll.dll");
PF Mensaje = (PF)GetProcAddress(hDll, "HelloWorld");
Mensaje();
FreeLibrary(hDll);
return 0;
}

esta es la funcion en la Dll:

DLLEXPORT void HelloWorld ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}

Saludos.