Ciao a tutti,
Se usate C++ e cercate di caricare librerie C mi sà che avrete dei problemini....c'è un po' di differenza con il C per caricare le classi, poichè esiste una prassi denominata "name mangling". Le funzioni che non sono "static" vengono convertite in simboli nel file binario, mentre in C il nome della funzione ed il relativo simbolo corrispondono, poichè qui è palese che due funzioni non static abbiano nomi differenti.
In ogni libreria o file oggetto C++ , le funzioni non-static vengono rappresentate da simboli, i quali sono delle stringhe che identificano unicamente la libreria, piuttosto che la funzione o il file oggetto. Mentre in C simbolo e nome della funzione sono uguali (dal momento che due funzioni non statiche possono solo avere nomi distinti), in C++ potete avere una stessa funzione dichiarata più volte con differenti argomenti (overloading), questo però impedisce di utilizzare il solo nome della funzione per rintracciarla. Il "name mangling" modifica perciò il descrittore inserendo dati estesi sulla funzione, perciò la libreria stessa non potrà essere compilata se non in C++. Potreste avere problemi addirittura con compilatori differenti!
La soluzione stà nell'usare la direttiva "Extern", la quale indica al compilatore di attuare il binding dell'oggetto: all'interno dell'oggetto possono esservi sia oggetti (a.e. funzioni) in C che in C++, non importa.
Un piccolo esempio:
extern "C" {
extern int Procedura;
extern void Funzione();
}
Spero di essere stato di aiuto,
Saluti
Federico
Ciao a tutti,
per un progetto universitario abbiamo bisogno di utilizzare delle librerie! Abbiamo provato di tutto...
Le abbaimo messe in tutte le cartelle possibili ed immaginabili. Siamo persino arrivate a creare una libreria personale con le funzioni da richiamare... Ma niente....
Qualcuno sa darci qualche consiglio...
Vi prego, siamo abbastanza disperate :cry:
Grazie Claudia e Oriana!!!