2011-05-04 12 views

risposta

6
  1. Se si abilita l'estensione CPP lingua, si può quindi legalmente encorporate C sintassi pre-processore nel vostro programma di Haskell.
  2. Per accedere a una struttura è un po 'più complicato. Il modo più semplice è probabilmente utilizzare the Storable typeclass per definire i metodi peek e poke per ogni campo della struttura. Lo strumento hsc2hs può essere d'aiuto.
  3. Si utilizza CInt ogni volta che è necessario passare un Haskell Int ao da C, in quanto ciò garantisce l'eventuale marshalling richiesto (lo stesso vale per CDouble, CString e così via).

Il pacchetto X11 ha many examples di definire e il marshalling delle strutture tramite l'FFI.


Maggiori informazioni in:

+0

ho una funzione c come: int foo(); devo scrivere nella firma haskell Int o CInt, sofar i jzst usato Int termina tutto il lavoro – ewggwegw

+0

@ewggwegw: Per la funzione stessa, usa CInt. L'utilizzo di Int potrebbe o potrebbe non funzionare, a seconda della piattaforma. – fuz

+0

'importazione esterna ccall" foo "c_foo :: IO CInt', ad esempio. –

3
  1. CPP è il preprocessore C. Ti consente di utilizzare la compilazione condizionale e i macros. Di solito, non è necessario, ma diventa utile, non appena si dispone di codice dipendente dalla piattaforma, in cui il codice da compilare viene deciso da uno script esterno (come con gli autotools).
  2. Dai un'occhiata a c2hs
  3. Utilizzare Cint solo per l'importazione diretta. Quando crei una rilegatura alto livello, passa a Int in quanto non richiede che l'utente importare le librerie richieste ed è Haskell
Problemi correlati