Chciałbym użyć Pure Data jako narzędzia do tworzenia prototypów dla mojej własnej biblioteki. Dowiedziałem się, że łatki Pure Data są napisane w języku C, ale moja biblioteka jest napisana w C++. Więc jak mogę użyć tego kodu w czystych danych? Ponieważ nie używałem zwykłego C, chciałbym wiedzieć, w jaki sposób mogę napisać opakowanie C dla klas C++ i jak tworzyć instancje? Czy muszę przepisać wszystko w C?C Wrapper dla C++
Odpowiedz
Musisz napisać funkcje otoki dla każdej funkcji, która musi być wywołana na przykład:!.
// The C++ implementation
class SomeObj { void func(int); };
extern "C" {
SomeObj* newSomeObj() {return new SomeObj();}
void freeSomeObj(SomeObj* obj) {delete obj;}
void SomeObj_func(SomeObj* obj, int param) {obj->func(param)}
}
// The C interface
typedef struct SomeObjHandle SomeObj;
SomeObj* newSomeObj();
void freeSomeObj(SomeObj* obj);
void SomeObj_func(SomeObj* obj, int param);
Uwaga thi s musi być w C++. Parametr extern "C"
określa, że funkcja używa konwencji nazewnictwa C.
Zamiast używać 'void *' powinieneś użyć niekompletnej struktury, aby uzyskać pewne bezpieczeństwo. –
Aby lepiej zrozumieć, 'extern 'Linkage_Specification" {// code} 'W ten sposób przekazujemy kompilatorowi specyfikację Linkage do użycia podczas łączenia kodu. –
Nie jestem pewien, czy rozumiem twój przykład całkowicie. Jeśli deklaruję te zewnętrzne funkcje "C" w nagłówku C++, dlaczego muszę zadeklarować go ponownie w C? Czy nie mogę po prostu dołączyć nagłówka C++ do mojego pliku C i wywołać funkcje bezpośrednio? – Pedro
Możesz całkowicie zadzwonić do C z C++ - nie ma problemu!
W najgorszym przypadku może być konieczne jawne zadeklarowanie funkcji, które wywołujesz z Pure Data, jako "extern C". Ale to jest prawie pewne, że dane Czysta już zrobił to za Ciebie (prawdopodobnie zobaczysz „extern C” w czystej plików nagłówkowych danych
Oto więcej informacji.
http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx
„Mam nadzieję, że pomaga
Myślę, że z Q OP chce wywołać C++ z C, a nie w inny sposób. –
Chciałbym użyć go w inny sposób: wywołanie C++ z c. – Pedro
Ale prawdopodobnie Pure Data, cokolwiek to jest, wie tylko o C. –
Ujmę to inaczej:
1) Możesz zadzwonić C funkcje, danych i bibliotek z C++ źródła i zadzwonić C++ źródło z C
2) Ilekroć C nazywa się C++ źródło jednak to źródło musi być napisane w C z podzbioru C++.
3) Część tego używa "extern C".
4) Inna część jest za pomocą "ifdef __cplusplus"
5) związek, że wymienione wyżej wymienione wiele szczegółów
6), że wyglądały na Pure Data site. Być może będziesz musiał dokonać pewnych "poprawek" w swojej bibliotece. Możesz chcieć utworzyć nowy nagłówek. Ale zasadniczo myślę, że prawdopodobnie osiągniesz swój cel, jakim jest doprowadzenie biblioteki do integracji z Pure Data.
IMHO ...
Można również napisać obiektów dla danych Czystych wykorzystaniem C++ przy użyciu flext framework.
- 1. Lua Wrapper dla C#?
- 2. authorize.net C# wrapper/library
- 3. C# .net wrapper dla c dll, konkretnie lglcd (g19 sdk)
- 4. C++ wrapper dla Sqlite3 API - alternatywy dla sqlite3pp
- 5. Automatyczne generowanie klasy Wrapper w języku C# przy użyciu kompozycji
- 6. setuid/setgid wrapper dla skryptu Pythona
- 7. Język skryptowy dla C/C++?
- 8. TempData Wrapper
- 9. Java Wrapper dla Mailchimp API v3.0
- 10. SQLite Database z FMDatabase Wrapper
- 11. Biblioteka plików właściwości dla C (lub C++)
- 12. Co oznacza ## dla preprocesora C (C++)?
- 13. Eclipse IDE dla C/C++ i Java
- 14. System kompilacji dla osadzonego projektu C/C++
- 15. C/C++ Biblioteki uczenia maszynowego dla klastrowania
- 16. Alternatywy/Narzędzia dla #define piekła C/C++
- 17. Analog z C++ FQA dla C#
- 18. Biblioteki wyjątków dla C (nie C++)
- 19. Dysk Google API dla C lub C++
- 20. Wyłącz ciągłe oznaczanie dla VS2010 (C/C++).
- 21. Opakowanie C++ dla boost/C++ 11
- 22. Zasoby matematyczne dla programistów C/C++
- 23. Narzędzie wywołania C/C++ dla platformy Windows
- 24. .Net MTP/PTP Wrapper?
- 25. Proste PDO wrapper
- 26. Czy obiekt C lub Objective C++ obsługuje wyjątki C++?
- 27. Jakie są alternatywy dla biblioteki wielościennej dla C/C++?
- 28. ReSharper dla C++
- 29. Implementacja hashtable dla C
- 30. Wtyczka C# dla Eclipse
Nieco późno, ale napisałem mały poradnik na temat C-owcy dla C++: http://www.teddy.ch/c++_library_in_c/ – Teddy