2012-10-17 21 views
8

Czy można automatycznie generować jednostki interfejsu z plików nagłówkowych C? W szczególności chcę owinąć bibliotekę HDF5 i byłoby wspaniale, gdybym mógł uniknąć ręcznego pisania jednostki interfejsu.Automatyczne tworzenie jednostki interfejsu Delphi/Freepascal z pliku nagłówkowego C

+0

To wygląda bardzo dużej i skomplikowanej biblioteki. Z pewnością przewiduję, że nie ma narzędzia, które dobrze i kompleksowo tłumaczy. –

+1

Istnieje częściowe tłumaczenie na Delphi wersji 4 biblioteki hdf [tutaj] (http://dspatial.sourceforge.net/). Znajdziesz go w folderze 'Drivers'. Może służyć jako pierwszy krok do tłumaczenia. –

+0

Problemem jest HDF4, a HDF5 nie udostępnia niczego poza * HDF * w ich nazwie ... –

Odpowiedz

11

Bezpłatny paskal zawiera narzędzie H2PAS.

h2pas próbuje przekonwertować plik nagłówka C na jednostkę paskową. może on obsługiwać większość C konstruktów znajdujących się w pliku nagłówkowym C, a próbuje tłumaczyć je na ich odpowiedniki pascalowe.

+0

Jest to o wiele lepsze rozwiązanie niż inne narzędzia, których używałem, ale w praktyce nadal trzeba dużo ręcznie przetwarzać. –

+0

To wygląda jak droga. Zobaczę, jak daleko mnie to naprawdę ... –

5

Bob Swart() posiada narzędzie, które będzie przekonwertować wiele plików nagłówkowych (choć to zazwyczaj niektóre prace ręczne zaangażowany również) nazywa HeaderConvert. Nigdy nie porównałem go do linków narzędzia @RRUZ, ale jest to inna opcja.

Project JEDI ma również; Nigdy tego nie testowałem. Możesz go znaleźć here.

+0

Jedi jest w zasadzie taki sam jak headconv. –

5

W ogólnym pełni zautomatyzowany tłumaczenia z nagłówkami C do czegoś innego (to nie jest skutecznym rozszerzeniem potrzebnej funkcjonalności C) trudno jest niemożliwe.

To dlatego, że z powodu makr nie można ich przetłumaczyć. Makra często mają znaczenie tylko z kontekstu. Przykład

#define uglymacro 1,2,3,4 

ale również (i to jest bardziej powszechne):

SCARYAPIMACRO void func(int c); 

SCARYAPIMACRO jest wtedy często makro, która testuje OS definiuje wybrać odpowiednią konwencję wzywającą do prawej OS/architektury.

Mimo to nie oznacza to, że narzędzia nie są prawdziwymi timeouverami. Ale wynik jest bardziej półautomatyczny, mam najbardziej i najlepsze wrażenia z h2pas.

Przetłumaczyłem wiele nagłówków systemu Windows (w tym Communicator FPC, który ma co kilka linii makro wysyłania wiadomości).

Zazwyczaj robię mały program paskalowy, który skanuje linię bazową i używa heurystyki, aby podzielić ją na części, które są w większości jednorodne (wszystkie struktury lub stałe, makra, deklaracja procedury itp.). Potem patrzę na źródło i często robię jakieś globalne substytuty.

Dopiero wtedy przeprowadzam go przez tłumacza, proces jest często iteracyjny (popraw separację, dokonuj globalnych podstawień, spróbuj przetłumaczyć, jeśli się nie powiedzie, spróbuj ponownie itd.).

Proces niestety wymaga dobrego uchwycenia elementów C, pragma.