PDA

View Full Version : [C++] interfacciarsi con script a codice C


Albitexm
08-07-2010, 20:24
Ho scritto un programma in C++. Devo farlo comunicare con un altro programma
open source realizzato in C. Ho scritto all'autore del programma e siccome ho
specificato che sono un principiante, lui mi ha consigliato di usare degli script,
perchè integrare il suo codice nel mio, sarebbe troppo complicato per me.
Qualche consiglio?

tomminno
08-07-2010, 22:02
Ho scritto un programma in C++. Devo farlo comunicare con un altro programma
open source realizzato in C. Ho scritto all'autore del programma e siccome ho
specificato che sono un principiante, lui mi ha consigliato di usare degli script,
perchè integrare il suo codice nel mio, sarebbe troppo complicato per me.
Qualche consiglio?

Mah secondo me il suo era un modo per dirti: "ho scritto un programma talmente schifoso che nessuno, tranne forse me, riesce a metterci le mani su".
In teoria avendone i sorgenti non dovresti fare altro che aggiungerli al progetto del tuo IDE (qualunque esso sia) e richiamare le funzioni messe a disposizione dal software.

Non vedo come possano fare al caso tuo degli script (con che linguaggio poi?)

Albitexm
08-07-2010, 23:09
Mah secondo me il suo era un modo per dirti: "ho scritto un programma talmente schifoso che nessuno, tranne forse me, riesce a metterci le mani su".?)

considera anche l'ostacolo della lingua (è straniero).

In teoria avendone i sorgenti non dovresti fare altro che aggiungerli al progetto del tuo IDE (qualunque esso sia) e richiamare le funzioni messe a disposizione dal software.

Ma posso aggiungere dei sorgenti in C in un progetto C++ ? Semplicemente così, senza seguire nessuna procedura specifica?
Nota: nel readme l'autore scrive che per usare il suo programma gli autori di codice dovrebbero compilare e linkare un elenco di file e includere delle librerie.
(ma questo io credo sia riferito per chi scrive in C).

tomminno
09-07-2010, 07:49
Ma posso aggiungere dei sorgenti in C in un progetto C++ ?


Si. Generalmente gli IDE riconoscono le estensioni e compilano automaticamente i file .c come C e i file cpp come C++. Eventualmente c'è la possibilità di specificare le opzioni di compilazione per ogni file, ma non dovrebbe essere necessario.


Semplicemente così, senza seguire nessuna procedura specifica?


Quando andrai ad includere gli header del progetto C nel tuo codice C++ dovrai scrivere:

extern "C"
{
#include "extCHeader1.h"
#include "extCHeader2.h"
#include "extCHeader3.h"
//...
}



Nota: nel readme l'autore scrive che per usare il suo programma gli autori di codice dovrebbero compilare e linkare un elenco di file e includere delle librerie.
(ma questo io credo sia riferito per chi scrive in C).

Direi che lo devi fare anche te.

Albitexm
09-07-2010, 18:13
Direi che lo devi fare anche te.

D'accordo ma lui scrive:
"
To include this code in any engine or GUI, the following files should be
compiled and linked:
elenco file

The following files will be "included"
gtb-probe.h
gtb-dec.h
gtb-att.h

plus all the *.h files in the folders, so set the proper -I flags:
sysport/
compression/
compression/huffman/
compression/liblzf/
compression/zlib/
compression/lzma/

The following libraries should be linked in Linux
-lpthread
-lm

In Windows, the appropriate MT (multithreaded library should be linked too)

These switches should be set in the compiler
-D NDEBUG
-D Z_PREFIX

The first one removes the assert code, and the second
one makes sure that some names in the zlib library will not
collision with names in other compression libraries.
".
Non capisco bene la frase: "plus all the *.h files in the folders, so set the proper -I flags:".

In teoria avendone i sorgenti non dovresti fare altro che aggiungerli al progetto del tuo IDE (qualunque esso sia) e richiamare le funzioni messe a disposizione dal software.
Questo sottintende che io abbia compreso alla perfezione il funzionamento del programma scritto da terzi, al punto di sapere quali funzioni devo richiamare per i miei scopi. Ma questo non è scontato.

Albitexm
09-07-2010, 18:48
Non vedo come possano fare al caso tuo degli script (con che linguaggio poi?)

Che ne pensi di System? (C)
E di spawn..() ?

cionci
09-07-2010, 19:11
Non capisco bene la frase: "plus all the *.h files in the folders, so set the proper -I flags:".
-I è l'opzione del compilatore che permette di specificare al compilatore un percorso in cui dover andare a cercare i file .h.
Ad esempio:

-I/sbin/lib/include/pippo

Nel codice:

#include <pluto.h>

Il compilatore andrà a cercare pluto.h in tutte i percorsi di include di default e in tutti quelli specificato da riga di comando, incluso /sbin/lib/include/pippo

tomminno
09-07-2010, 19:17
Non capisco bene la frase: "plus all the *.h files in the folders, so set the proper -I flags:".


-I è l'opzione di gcc per l'inclusione delle directory dove il compilatore andrà a cercare gli header.
Che compilatore stai usando? E soprattutto su che piattaforma sei?


Questo sottintende che io abbia compreso alla perfezione il funzionamento del programma scritto da terzi, al punto di sapere quali funzioni devo richiamare per i miei scopi. Ma questo non è scontato.

Se il software non è documentato e se non ha un'API pensata per l'integrazione dovrai spulciartelo ben bene.

Albitexm
09-07-2010, 19:28
-I è l'opzione del compilatore che permette di specificare al compilatore un percorso in cui dover andare a cercare i file .h.


Thanks ;)