Mam bibliotekę C ++, która udostępnia różne klasy do zarządzania danymi. Mam kod źródłowy biblioteki.
Chcę rozszerzyć interfejs API C ++, aby obsługiwał wywołania funkcji C, aby biblioteka mogła być używana z kodem C i kodem C ++ w tym samym czasie.
Używam łańcucha narzędzi GNU (gcc, glibc itp.), Więc obsługa języka i architektury nie stanowi problemu.
Czy są jakieś powody, dla których tak jest technicznie niemożliwe?
Czy są jakieś pułapka, na którą muszę uważać?
Czy są dostępne zasoby, przykładowy kod i / lub dokumentacja na ten temat?
Kilka innych rzeczy, o których się dowiedziałem:
- Użyj poniższego, aby zawinąć nagłówki C ++, które muszą być używane przez kod C.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Przechowuj "prawdziwe" interfejsy C ++ w oddzielnych plikach nagłówkowych, które nie są objęte zasadą C. Pomyśl o PIMPL tutaj o . Używanie
#ifndef __cplusplus #error
rzeczy pomaga tutaj wykryć jakiekolwiek szaleństwo. - Uważaj na identyfikatory C ++ jako nazwy w kodzie C.
- Wyliczenia różniące się rozmiarem między kompilatorami C i C ++. Prawdopodobnie nie stanowi to problemu, jeśli używasz łańcucha narzędzi GNU, ale mimo to bądź ostrożny.
W przypadku struktur postępuj zgodnie z następującym formularzem, aby C nie pomylił się.
typedef struct X { ... } X
Następnie użyj wskaźników do przekazywania obiektów C ++, po prostu muszą być zadeklarowane w C jako struktura X, gdzie X jest obiektem C ++.
Wszystko to dzięki uprzejmości przyjaciela, który jest czarodziejem w C ++.