VC++ - Problema caricamento DLL

sabato 17 luglio 2010 - 15.38
Tag Elenco Tags  Visual Studio 2008

lucariello Profilo | Newbie

Salve a tutti!
Ho un problema con l'applicazione che ho sviluppato.
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!! :)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5