No me es posible implementar un metodo virtual en una dll.
Creo una clase (ImplementadoradeX) que extiende e implementa a otra (X) con un metodo virtual.
class X
{
public:char* Nombre;
public:virtual void MetodoaImplementar()=0;
}
En una dll que cargo dinamicamente con LoadLibrary creo una instancia de la clase "ImplementadoradeX" y la devuelvo como un puntero en una funcion (ImplementadoradeX* getRefereciadeImplementadoradeX()) que resuelvo en tiempo de ejecucion con getprocaddress
class ImplementadoradeX: public X
{
public void MetodoaImplementar()
{
//Hacemos algo aqui
};
}
X* getRefereciadeImplementadoradeX()
{
return new ImplementadoradeX();
}
Si ejecuto este codigo, siempre obtengo una violacion de acceso:
(getRefereciadeImplementadoradeX es un puntero a funcion obtenido con getprocaddress)
X* RefedenciaDesdeDLL = getRefereciadeImplementadoradeX();
char* Nombre = ReferenciaDesdeDLL->Nombre;//Funciona siempre
ReferenciaDesdeDLL->MetodoaImplementar(); //Falla siempre con violacion de acceso cuando MetodoaImplementar() es virtual, si MetodoaImplementar() no es virtual ejecuta el codigo de la clase X. El fallo NO es que ReferenciaDesdeDLL sea un puntero nulo.
¿Alguna Solucion?
Implementacion Metodo Virtual en una DLL Win32 con C++
Moderador: Moderadores