Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [C] Problemi di link tra DLL

    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

  2. #2
    E' un pò difficile dati suggerimenti così...
    ma non credo proprio che dipenda dal linker,
    piuttosto controlla bene F' secondo me è li il problema,
    ci sarà qualche errore di programmazione che non riesci a trovare.

    Ebbi lo stesso problema e fui contento di scoprire che avevo fatto una ca..ata
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    ti dico la cosa strana

    a parte il fatto che F' non la sviluppo io, comunque l'ultima volta che avevo avuto un problema simile (settimana scorsa) l'ho effettivamente risolto facendo delle piccole modifiche al codice, ma era roba assolutamente ininfluente da questo punto di vista

    e ad un certo punto il problema è sparito misteriosamente

    io sto usando visual studio 6 per E e T, mentre da quanto ne so F viene sviluppato con vs 4..possibile che sia proprio visual studio a fare qualche casino?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    mortacci

    sono impazzito per giorni, e alla fine avevi ragione tu

    Questo modulo F' aveva dei problemi e generava dei valori sballati, che andava poi a scrivere in una stringa allocata in T. Dato che i caratteri che scriveva, a causa di questo bug, erano oltremodo numerosi la stringa in T andava in overflow e probabilmente sovrascriveva l'esp con della mondezza.

    In breve, è bastato allocare piu spazio per la stringa.

    Grazie comunque

    Salut


  5. #5
    Tutto funzionava, poi feci delle modifiche alla libreria, modifiche per me insignificanti...
    E paf, non funzionava piu... o meglio (e questa fu la fortuna) a volte funzionava e a volte no.

    Era proprio la lunghezza delle stringhe!!
    Unbelievable.

    Tutto è bene ciò che finisce bene.
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.