2012-06-05 12 views
5

Ich kann nicht bekommen, was die Smoke ist. Ich habe erwartet, dass Rauch C-Wrapper für C++ - Code generieren und Header-Datei mit generierten Funktionen erstellen wird.Wie benutzt man KDE's Smoke?

Aber läuft smokegen auf C++ - Header gibt mir winzige Header, die nur Zeiger auf einige Smoke Klasse und <sourcename>_smoke_init() Funktion exportiert.

Was soll ich damit machen?

+1

rtfm? oder gibt es kein Handbuch? lese dann seinen Quellcode? – Abyx

Antwort

7

Smoke ist ein Laufzeitbindungsgenerator, ähnlich wie Gobject-Introspektion, wenn Sie das wissen.

Das heißt, es generiert Informationen über den Code, den Sie binden, und stellt es als eine Bibliothek zur Verfügung. Um die generierte Bibliothek zu verwenden, müssen Sie Code für die Smoke-API (eine C++ - API) schreiben, um Informationen zu dem Code zu erhalten, für den Sie Bindungen generiert haben, und die Smoke-API zum Aufrufen von Funktionen in den Code verwenden Verpackung.

Das Beispiel in der Seite http://techbase.kde.org/Development/Languages/Smoke zeigt, wie Sie die API verwenden, den Code aufzurufen in Sie (Erstellen Qt Widgets Hallo Welt Beispiel hier)

Rauch-API eingeführt sind verbindlich ist hier http://techbase.kde.org/Development/Languages/Smoke/API_Documentation für einige heikelen Teile, aber die Die wichtigste Informationsquelle, die ich gefunden habe, ist der smoke.h-Header.

Ich habe eine C-Bindung (https://github.com/pankajp/pysmoke/blob/master/include/smokec.h) an Smoke in meinem Versuch entwickelt, eine Qt-Python-Bindung basierend auf Rauch zu schreiben, die bereits für einige einfache Programme funktioniert. Sie können es als Ausgangspunkt verwenden, wenn Sie Smoke von C verwenden möchten. Wenn Sie stattdessen nur eine kleine einfache C++ - Bibliothek für C verfügbar machen möchten, ohne sich darum zu kümmern, Unterklassen in C zu erstellen (in keiner Weise)) und überschreiben virtueller oder geschützter Methode, das heißt, Sie wollen nur den vorhandenen Code verwenden, ohne ihn zu erweitern, dann sollten Sie besser die Bindungen manuell schreiben (wie ich es für die Smoke C++ API getan habe, obwohl ich dort auch zur Verfügung gestellt habe) eine Möglichkeit, virtuelle Methoden in C zu implementieren, indem ein Funktionszeiger übergeben wird.