VC++ - Problema caricamento DLL

di il
1 risposte

VC++ - Problema caricamento DLL

Salve a tutti!
Ho un problema con l'applicazione che ho sviluppato (Visual Studio 2008).
In pratica essa consiste in una GUI che richiama una DLL (in maniera esplicita).
Il problema consiste nel fatto che, in maniera del tutto random, l'applicazione si blocca completamente e devo terminarla dal task manager. Facendo un po di debug sono riuscito a capire che il problema sta nel caricamento del metodo "main" della DLL, ma la natura randomica del problema mi lascia perplesso.

Posto un po di codice...

________________________________________________________________________________________________________________

/* Richiama dalla GUI il "main" della DLL, pare che funzioni tutto finchè non viene invocato startMOEfinder_Exp(gd.dI) */
public: static void runDll(void *p)
{
globData &gd = *static_cast<globData *>(p);
HMODULE hMod = LoadLibraryA("MOEfinder.dll"); //Caricamento DLL
if (hMod == NULL)
{
return;
}
//Caricamento indirizzo del metodo di avvio
STARTMOEFINDER_EXP startMOEfinder_Exp = (STARTMOEFINDER_EXP) GetProcAddress(hMod, "startMOEfinder");
if (!startMOEfinder_Exp)
{
FreeLibrary(hMod);
return;
}
gd.dO = startMOEfinder_Exp(gd.dI); //Avvio della simulazione
gd.dO.ok = 1;
}



// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}



/** ###############################################################################

Classe contenente definizioni di strutture per l'input e l'output e per le
dichiarazioni della DLL

###############################################################################*/

struct sol //Struttura usata per rappresentare l'output
{
float s1;
float s2;
float s3;
float s4;
float s5;
int ok;
};

struct dataIn //Struttura usata per rappresentare l'input
{
float tMax;
float errRate;
int replications;
float timeStep;
float uMin;
float uMax;
float tauMin;
float tauMax;
float vMin;
float vMax;
float rMin;
float rMax;
float lambdaMin;
float lambdaMax;
};

#ifdef MOEFINDER_EXPORTS
#define MOEFINDER_API __declspec(dllexport)
#else
#define MOEFINDER_API __declspec(dllimport)
#endif
extern "C" MOEFINDER_API sol startMOEfinder(dataIn);


/* Main della DLL che a quanto pare non viene caricato per niente quando si verifica il problema */
MOEFINDER_API sol startMOEfinder(dataIn reader)
{
CNOLHmat nm; //Caricamento della matrice di input
nm.init(0,0);
nm.inputMat[0][0] = reader.uMin;
nm.inputMat[1][0] = reader.uMax;
nm.inputMat[0][1] = reader.tauMin;
nm.inputMat[1][1] = reader.tauMax;
nm.inputMat[0][2] = reader.vMin;
....
_____________________________________________________________________________________________________________________


Ciao e grazie in anticipo!!

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte