Sooooo Sto scrivendo un interprete di script. E in fondo, voglio che alcune classi e funzioni memorizzate in una DLL, ma voglio la DLL per cercare le funzioni all'interno dei programmi che si collegano ad esso, come,Compilazione di una DLL con gcc
program dll
----------------------------------------------------
send code to dll-----> parse code
|
v
code contains a function,
that isn't contained in the DLL
|
list of functions in <------/
program
|
v
corresponding function,
user-defined in the
program--process the
passed argument here
|
\--------------> return value sent back
to the parsing function
mi chiedevo in fondo, come faccio compilo una DLL con gcc? Bene, sto usando una porta Windows di gcc. Una volta che compilo un file .dll che contiene le mie classi e funzioni, come faccio a collegarmi ad esso con il mio programma? Come uso le classi e le funzioni nella DLL? La chiamata DLL può funzionare dal programma che si collega ad esso? Se creo un oggetto di classe {...}; nella DLL, quindi quando la DLL viene caricata dal programma, l'oggetto sarà disponibile per il programma? Grazie in anticipo, ho davvero bisogno di sapere come lavorare con le DLL in C++ prima di poter continuare con questo progetto.
"È possibile aggiungere ulteriori dettagli sul motivo per cui si desidera che la DLL chiami funzioni nel programma principale?"
Ho pensato che il diagramma lo spiegasse ... il programma che usa la DLL passa un pezzo di codice alla DLL, che analizza il codice, e se le chiamate di funzione si trovano in detto codice allora le funzioni corrispondenti all'interno della DLL sono chiamato ... ad esempio, se avessi passato "a = sqrt (100)", la funzione di parser DLL avrebbe trovato la funzione chiamata a sqrt(), e all'interno della DLL sarebbe stata una corrispondente funzione sqrt() che calcolerebbe il quadrato root dell'argomento passato ad esso, e quindi prenderebbe il valore di ritorno da quella funzione e lo metterà nella variabile a ... proprio come qualsiasi altro programma, ma se un gestore corrispondente per la funzione sqrt() non viene trovato all'interno la DLL (ci sarebbe una lista di funzioni supportate nativamente) quindi chiamerebbe una funzione simile che risiederà all'interno del programma usando la DLL per vedere se ci sono funzioni definite dall'utente con quel nome.
Quindi, diciamo che hai caricato la DLL nel programma dando al tuo programma la capacità di interpretare gli script di questo particolare linguaggio, il programma potrebbe chiamare le DLL per elaborare singole righe di codice o passare i nomi dei file degli script per elaborare ... ma se vuoi aggiungere un comando allo script adatto allo scopo del tuo programma, potresti dire di impostare un valore booleano nella DLL dicendogli che stai aggiungendo funzioni alla sua lingua e quindi creare una funzione nel tuo codice che elencerebbe le funzioni che si stanno aggiungendo (la DLL la chiamerebbe con il nome della funzione che desidera, se quella funzione è definita dall'utente all'interno del proprio codice, la funzione chiamerebbe la funzione corrispondente con l'argomento passato ad essa dalla DLL , restituisce il valore restituito della funzione definita dall'utente alla DLL e, se non esistesse, restituirebbe un codice di errore o NULL o s omething). Sto iniziando a capire che dovrò trovare un altro modo per aggirare questo per fare le chiamate di funzione vanno in un modo solo
wow, non sapevo nemmeno che esistesse un porto vincente di gcc. Avrei provato a utilizzare gcc con Windows come target della piattaforma. – cbrulak
Probabilmente dovresti specificare il compilatore esatto che stai utilizzando. Probabilmente la documentazione per quel compilatore ti dice come creare DLL. – SoapBox
si chiama mingw, o mingw32 credo ... Cercherò di trovare la documentazione di gcc ma sono abbastanza nuovo per C e C++ quindi alcuni aspetti di esso sono difficili da capire ancora – user61721