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

codice:
E          T           F
|
|
1)+-------->#   
  .          |
  .          |
2).         +-------->#
  .          .         |
  .          .         |
3)           # <------+
             |
             |
4) <--------+
Lo schema è semplice, E invoca T, che invoca F, e si risale lo stack fino a tornare ad E.

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