Newsgroup: it.comp.lang.vo-clipper
Titolo: clipper e C

Salve a tuuti,
vorrei sapere se in clipper si possono inserire
righe di codice C o utilizzare librerie create in C

 o utilizzare librerie create in C
Si, il Clipper č perfettamente compatibile con gli OBJ creati con un
compilatore C a 16 bit. Perņ le funzioni chiamabili da Clipper devono
essere scritte in un certo modo (cerca la documentazione relativa).
EMG

Scusa, ma non sei tu che sistieni che Clipper+FiveWin fanno tutto
quelo  che fa VO?
VO puo' mischiare codice VO, codice C e codice assembler!!
Ciao


-----------------------------
Fabio Cresta
Computer Associates FSG Consultant
VO/Jasmine specialist
e-mail: 
fabio....@ca.com
 
fcr...@tin.it
 
fcr...@windevs.com
web: 
http://www.windevs.com
------------------------------

 VO puo' mischiare codice VO, codice C e codice assembler!!
La domanda riguardava Clipper. E Clipper non è mai stato in grado di
compilare altro che codice Clipper. Mi meraviglia molto che un
compilatore possa compilare per tre linguaggi diversi! Perfino il C, che
ha tra le sue parole chiave la asm, consente si di inserire codice
Assembly nelle funzioni ma lascia poi completamente all'implementazione
come gestire la cosa. E normalmente la palla viene passata ad un
assembler esterno.
Detto questo ti chiedo: sei proprio sicuro di quanto hai affermato? Mi
fai qualche esempio?
EMG

Ciao
Nel senso che puoi effettuare chiamate a funzioni C e assembler
(questo lo fa anche Clipper), o nel senso che puoi scrivere
direttamente codice C/asm all'interno del codice VO ?
ciao, acc.   
a...@libero.it



Non puoi scrivere codice C all'interno di un programma in Clipper o
chiamare direttamente funzioni di librerie in C.
E' pero possibile scrivere funzioni in C (o assembler) richiamabili da
Clipper (tra l'altro e' una prassi molto utilizzata).
A differenza del C il Clipper non usa lo stack per il passaggio dei
parametri, inoltre il formato dei dati del Clipper e' diverso per cui
sono state aggiunte delle funzioni (utilizzabili in C) che permettono
sia il passaggio dei parametri sia il ritorno degli stessi al
chiamante.
Clipper e' scritto col compilatore C 5.1 di microsoft utilizzando la
libreria altmath (questo vale fino alla vers. 5.2 di Clipper).
Per questo motivo risulta comodo utilizzare tale compilatore (vanno
bene anche le versioni successive) dato che ti ritrovi diverse
funzioni di libreria gia' presenti.  Volendo utilizzare un altro
compilatore e' necessario linkarne le librerie.
ciao, acc.   
a...@libero.it

 compilatore e' necessario linkarne le librerie.
In realtà io ho sempre utilizzato il vecchio TurboC++ 1.01 (addirittura
anche per i programmi Windows) senza linkare nessuna libreria Microsoft.
Chiaramente dipende da ciò che si va ad utilizzare.
EMG

Chiaramente dipende da ciò che si va ad utilizzare.
Puoi certamente usare quello che ti pare, ad ogni modo in Clipper si
lavora meglio col m$, non che io ne sia entusiasta, e' solo una
constatazione di fatto.
ciao, acc.   
a...@libero.it

 constatazione di fatto.
Meglio perché? Io, come ho detto, ho sempre utilizzato il TurboC++ 1.01
e niente altro.
EMG

e niente altro.
Nella libreria di Clipper sono presenti anche parecchie funzioni del C
(itoa, strcpy e compagnia bella) in pratica come dicevo prima e'
linkata anche la libreria del C di ms (llibca.lib).
Usando lo stesso compilatore non hai bisogno di linkare quelle
funzioni o di modificare il codice per fare in modo che usi quelle
anziche' quelle del Borland, cio' comporta un risparmio in termini di
dimensione del codice.
Ad ogni modo, si tratta solo di una precisazione, come ho gia' detto
prima non e' certo indispensabile.
Io stesso utilizzo il Borland quando sviluppo in C e passo al
Microsoft+Tasm per interfacciarmi a Clipper, fosse per me preferirei
usare sempre lo stesso compilatore (of course)
ciao, acc.   
a...@libero.it

 dimensione del codice.
No, scusa, c'è qualcosa che non mi torna. Se una funzione di libreria C
è inclusa nella libreria del Clipper si può utilizzare da qualunque
compilatore C dato che la libreria C è standard e, grazie agli OBJ, c'è
anche la piena compatibilità binaria. Quindi mi sembra che non ci sia
bisogno di alcuna modifica al codice (quale poi?) se si vuole utilizzare
il Borland invece del Microsoft.
EMG


Certo. C'e' un articolo su SDT scritto da Ralph Saborowsky (product
Owner di VO) che spiega come si fa. 


ciao, acc.   
a...@libero.it


 funzione e genera i file intermedi con il compilatore appropriato.
Beh, questo è ben diverso dal compilare indifferentemente codice in
linguaggi diversi. Comunque, come si indica in quale linguaggio stai
scrivendo?
EMG


Basta far precedere la parola chiave Function o Method da 'asm' o 'c'


 Basta far precedere la parola chiave Function o Method da 'asm' o 'c'
Ottimo! Semplice ed efficace. Perň fammi capire: devi scrivere qualcosa
come
C FUNCTION pippo( int n )
{
    // Qui ci vanno le istruzioni in C
    return n;
}
E' cosě? E puoi anche passare e restituire parametri come ho fatto
sopra?
EMG

il Borland invece del Microsoft.
Il fatto che ogni compilatore generi un .OBJ non significa
automaticamente che esista una "compatibilita' binaria" se per questo
intendi la possibilita' di usare una funzione contenuta nell'OBJ da un
qualsiasi compilatore.
Esempio un po' stupido, che pero' rende l'idea:
Compilo un sorgente C -> c.obj
Compilo un sorgente Clipper -> clipper.obj
All'interno di c.obj c'e' una chiamata ad una funzione contenuta in
clipper.obj, :-P che ovviamente non puo' funzionare, o meglio
teoricamente potrebbe funzionare benissimo se mi costruissi una serie
di funzioni per fare questo, ma e' un altro paio di maniche...nella
pratica diciamo semplicemente che la cosa non va'.
I compilatori C per non sono pienamente compatibili l'uno con l'altro,
anzi a volte non lo sono affatto a livello di .OBJ o di .LIB (che non
fa molta differenza).
Per citare i due piu' 'conosciuti', il Borland ad esempio usa uno
schema diverso per memorizzare i dati sullo stack rispetto al
Microsoft, ed e' prassi normale, ad esempio, che i vari produttori di
librerie ne forniscano piu' copie della stessa libreria ciascuna delle
quali e' 'personalizzata' per un determinato compilatore.
Inoltre nelle cosidette 'librerie standard', le funzioni veramente
tali sono ben poche, nella pratica si usano abitualmente estensioni
proprietarie e funzioni totalmente custom.  E questo non tanto per
negligenza, quanto per l'assenza di funzioni nel sistema operativo (mi
riferisco al Dos) o per totale incompatibilita' delle stesse con altri
ambienti (mi riferisco al windows).
Come puoi utilizzare le funzioni della altmath (llibca.lib) se questa
non e' neanche contemplata nel Borland, e sopratutto se il codice che
richiama le funzioni di quella libreria non viene generato da chiamate
a funzioni ma da statement? Es:  double x = 1.0;
Il Borland generera' codice che richiama la 'sua' libreria FP.
Concludo ribadendo che l'utilizzo del ms 5.1 non e' fondamentale, solo
che qualche vantaggio lo da' e mi pareva corretto precisarlo.
ciao, acc.   
a...@libero.it

 che qualche vantaggio lo da' e mi pareva corretto precisarlo.
Più che vantaggi direi che in quel solo caso (matematica floating-point)
è obbligatorio utilizzarlo.
EMG

funzionano benissimo sugli stessi .OBJ e .LIB.
Come ho detto sopra, il formato OBJ (ed anche il LIB) non si curano
affatto del "contenuto" delle funzioni che incorporano.
Il fatto che lib/tlib riescano a manipolare un determinato file .OBJ
non significa automaticamente che il compilatore possa richiamare le
funzioni in esso contenute.
ciao, acc.   
a...@libero.it

 funzioni in esso contenute.
D'accordo. Ma qui si parlava di C. E su quello non ci sono problemi in
quanto il tutto è standardizzato. Quindi una funzione C scritta con un
qualunque compilatore C che produca il formato OBJ e rispetti la
convenzione di chiamata C standard può essere chiamata da Clipper. O no?
Mi rispondo da solo: no, deve anche supportare lo specificatore non
standard void pascal.
EMG

 standard void pascal.
Per quanto ne so lo specificatore void pascal e' standard, indica 
semplicemente l'ordine di presentazione dei parametri delle funzioni
nello stack del processore. In windows tutte le chiamate sono void pascal.
Ciao...
Claudio Driussi
http://www.swit.net/csoft
mailto:
cldr...@swit.net

 Per quanto ne so lo specificatore void pascal e' standard,
Assolutamente no! La keyword void è standard, la pascal no. E quindi
potrebbe fare qualsiasi cosa dato che è un'estensione del particolare
compilatore utilizzato.
EMG

 compilatore utilizzato.
Probabilmente hai ragione, comunque e' presente in tutti i compilatori
per DOS-WIN che ho visto.



-----------------------------


 sono distrutto!!), ti mando la copia dell'articolo.
No, era semplice curiositŕ. Grazie.
EMG