Tengo una DLL que se está cargando en tiempo de ejecución. La DLL se basa en una variable estática para el funcionamiento interno (es un std :: map), esta variable se define dentro de la DLL.Cargando DLL no inicializando clases C++ estáticas
Cuando llamo a la primera función de la DLL después de cargar, obtengo un SegFault de la DLL, el mapa nunca se inicializó. De todo lo que he leído de la carga DLL, la inicialización de datos estáticos y globales debe ocurrir incluso antes de la llamada a DLLMain.
Para probar la inicialización estática agregué una estructura estática que imprime un mensaje, e incluso arrojó un punto de interrupción para una buena medida.
static struct a
{
a(void) { puts("Constructing\n"); }
}statica;
No hubo ningún mensaje o ruptura antes de llamar a DLLMain o a la función.
Aquí está mi código de carga:
dll = LoadLibrary("NetSim");
//Error Handling
ChangeReliability = reinterpret_cast<NetSim::ChangeReliability>
(GetProcAddress(dll, "ChangeReliability"));
ChangeReliability(100);
He comprobado que la versión DLL es la correcta, reconstruido todo el proyecto varias veces, pero no hubo diferencias. Estoy recién de ideas.
¿Hay alguna referencia a su objeto 'statica'? De lo contrario, podría optimizarse. – atzz