2012-06-05 14 views
5

Non riesco a capire cosa sia lo Smoke. Mi aspettavo che il fumo generi C wrapper per il codice C++ e crei file di intestazione con funzioni generate.Come usare il fumo di KDE?

Ma l'esecuzione di smokegen su intestazioni C++ mi dà un'intestazione molto piccola, che esporta solo il puntatore ad alcune classi Smoke e la funzione <sourcename>_smoke_init().

Cosa dovrei fare con questo?

+1

rtfm? o non c'è un manuale? leggi il suo codice sorgente allora? – Abyx

risposta

7

Smoke è un generatore di binding a runtime, un po 'come un introspezione di gobject, se lo sai.

Ciò significa che genera informazioni sul codice che si sta vincolando e lo rende disponibile come libreria. Per utilizzare la libreria generata, è necessario scrivere codice contro l'API Smoke (che è un'API C++) per ottenere informazioni sul codice per il quale sono stati generati i binding e utilizzare l'API Smoke per chiamare le funzioni nel codice che si è avvolgimento.

L'esempio nella pagina http://techbase.kde.org/Development/Languages/Smoke mostra come si utilizza l'API per chiamare nel codice si sono vincolanti (la creazione di Qt Widget ciao esempio del mondo qui)

fumo API è introdotto qui http://techbase.kde.org/Development/Languages/Smoke/API_Documentation per alcune parti difficili, ma la la principale fonte di informazioni che ho trovato è l'intestazione smoke.h.

Ho sviluppato un legame C (https://github.com/pankajp/pysmoke/blob/master/include/smokec.h) su Fumo nel mio tentativo di scrivere un binding Qt-python basato sul fumo, che funziona già per alcuni programmi semplici. Potresti trovarlo come punto di partenza se vuoi utilizzare Smoke from C.

Se, invece, sei solo interessato a esporre una piccola libreria C++ semplice a C, senza preoccuparti di creare sottoclassi in C (in alcun modo) e sovrascrivendo il metodo virtuale o protetto, cioè si desidera semplicemente utilizzare il codice esistente senza estenderlo in alcun modo, quindi potrebbe essere meglio scrivere i binding manualmente (come ho fatto per l'API Smoke C++, anche se ho fornito anche un modo per implementare metodi virtuali in C passando un puntatore a una funzione)