Ho un problema un po complicato, provo a spiegarlo meglio che posso.
Ho tre moduli, tutti scritti in c
- una dll che chiamerò F
- una dll che chiamerò T
- un eseguibile che chiamero E
Provo a schematizzare una sorta di sequence diagram
Lo schema è semplice, E invoca T, che invoca F, e si risale lo stack fino a tornare ad E.codice:E T F | | 1)+--------># . | . | 2). +--------># . . | . . | 3) # <------+ | | 4) <--------+
I link tra i vari moduli sono fatti a tempo di compilazione, linkando i vari .lib tra di loro, per la precisione:
1. faccio il build di F
2. copio .dll e .lib di F nello spazio di lavoro di T
3. build T
4. copio .dll e .lib di T e di F in E
5. build di E
Ora veniamo al problema: nel diagramma ho evidenziato 4 punti.
Eseguendo E in debug, tutto sembra funzionare quasi correttamente fino al punto 4) (dico quasi perche alcuni risultati numerici non sono corretti, ma non è detto che le cose siano correlate).
Giunta l'esecuzione al punto 4), cioè l'ultimo punto di 'risalita dello stack', avviene la stranezza: il controllo del programma non torna alla funzione chiamante di E, ma va a finire in un area di memoria che non c'entra niente causando cosi un access violation.
Un'ultima osservazione: questo tipo di architettura, realizzato come descritto, ha funzionato finche non ho sostituito al modulo F un altro modulo F' piu aggiornato.
Sono moderatamente sicuro che ci sia qualche incasinamento col linker, ma non riesco a venirne a capo. qualche suggerimento prezioso?
p.s. non ho postato codice perche sono tonnellate di linee di codice e non avrebbe senso postarne un frammento