2012-06-05 21 views
5

Nie mogę uzyskać tego, co jest Smoke. Spodziewam się, że dym wygeneruje owijki C dla kodu C++ i utworzy plik nagłówkowy z wygenerowanymi funkcjami.Jak korzystać z dymu KDE?

Ale uruchamianie smokegen na nagłówkach C++ daje mi mały nagłówek, który po prostu eksportuje wskaźnik do pewnej klasy Smoke i <sourcename>_smoke_init().

Co mam z tym zrobić?

+1

rtfm? lub nie ma instrukcji? przeczytaj zatem jego kod źródłowy? – Abyx

Odpowiedz

7

Dym to generator wiążący środowisko wykonawcze, przypominający introspekcję gobject, jeśli to wiesz.

Oznacza to, że generuje informacje o wiążącym się kodzie i udostępnia go jako bibliotekę. Aby korzystać z wygenerowanej biblioteki, musisz napisać kod przeciwko API Smoke (który jest API C++), aby uzyskać informacje o kodzie, dla którego wygenerowałeś powiązania, i użyć funkcji Smoke API do wywoływania funkcji w kodzie, którym jesteś zawijanie.

Przykład na stronie http://techbase.kde.org/Development/Languages/Smoke pokazuje, w jaki sposób korzystać z interfejsu API, aby zadzwonić do kodu jesteś wiązania (tworzenie QT widżety Witam Przykład świata tutaj)

Smoke API wprowadza tutaj http://techbase.kde.org/Development/Languages/Smoke/API_Documentation dla niektórych trudnych częściach, ale Głównym źródłem informacji, które znalazłem, jest nagłówek smoke.h.

Opracowałem wiązanie C (https://github.com/pankajp/pysmoke/blob/master/include/smokec.h) do Smoke podczas próby napisania wiązania pyt-python opartego na dymie, które działa już dla niektórych prostych programów. Możesz go znaleźć jako punkt wyjścia, jeśli chcesz używać Smoke z C.

Jeśli zamiast tego interesujesz się tylko wystawieniem małej, prostej biblioteki C++ na C, bez zawracania sobie głowy tworzeniem podklas w C (w jakikolwiek sposób) i nadpisywanie wirtualnej lub chronionej metody, to znaczy, że chcesz tylko użyć istniejącego kodu, nie rozszerzając go w żaden sposób, wtedy lepiej byłoby ręcznie napisać powiązania (tak jak zrobiłem to dla API Smoke C++, chociaż tam też zapewniłem sposób implementacji metod wirtualnych w C za pomocą wskaźnika funkcji)