2012-06-05 13 views
5

No puedo obtener lo que es Smoke. He estado esperando que smoke genere C wrappers para código C++ y cree un archivo de cabecera con funciones generadas.¿Cómo usar el humo de KDE?

Pero ejecutar smokegen en los encabezados C++ me da un encabezado pequeño, que solo exporta puntero a alguna clase Smoke y la función <sourcename>_smoke_init().

¿Qué se supone que debo hacer con esto?

+1

rtfm? o no hay manual? leer su código fuente entonces? – Abyx

Respuesta

7

Smoke es un generador de enlace en tiempo de ejecución, algo así como gobject-introspection si lo sabes.

Eso significa que genera información sobre el código que está vinculando y lo hace disponible como una biblioteca. Para usar la biblioteca generada, debe escribir código en contra de la API de Smoke (que es una API de C++) para obtener información sobre el código para el que ha generado enlaces, y usar la API de Smoke para llamar funciones al código que está envase.

El ejemplo de la página http://techbase.kde.org/Development/Languages/Smoke muestra cómo se utiliza la API para poner en el código va a enlazar (crear Qt Reproductores hola ejemplo del mundo aquí)

API de humo se introduce aquí http://techbase.kde.org/Development/Languages/Smoke/API_Documentation para algunas partes difíciles, pero el La principal fuente de información que encontré es el encabezado smoke.h.

He desarrollado una encuadernación en C (https://github.com/pankajp/pysmoke/blob/master/include/smokec.h) para fumar en mi intento de escribir una encuadernación Qt-python basada en el humo, que ya funciona para algunos programas simples. Puede encontrarlo como punto de partida si desea usar Smoke de C.

Si, en cambio, está interesado en exponer una pequeña biblioteca simple de C++ a C, sin molestarse en crear subclases en C (de ninguna manera) y reemplazando el método virtual o protegido, es decir, si solo desea usar el código existente sin extenderlo de ninguna manera, entonces será mejor que escriba los enlaces manualmente (como hice para la API Smoke C++, aunque allí también proporcioné una forma de implementar métodos virtuales en C pasando un puntero de función)

Cuestiones relacionadas