Mi piacerebbe utilizzare Pure Data come strumento di prototipazione per la mia libreria. Ho scoperto che le patch di Pure Data sono scritte in C, ma la mia libreria è scritta in C++. Quindi, come posso utilizzare questo codice in puro dati? Dato che non ho usato C semplice, mi piacerebbe sapere come scrivere un wrapper C per le classi C++ e come creare istanze delle mie classi? O devo riscrivere tutto in C?C Wrapper per C++
risposta
avrete bisogno di scrivere funzioni wrapper per ogni funzione che deve essere chiamato, ad esempio:!.
// 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);
Nota Thi s deve essere il codice C++. Lo standard extern "C"
specifica che la funzione utilizza le convenzioni di denominazione C.
Invece di usare 'void *' dovresti usare una struttura incompleta per ottenere un po 'di sicurezza. –
Per aiutare a capire meglio, extern "Linkage_Specification" {// code} 'In questo modo si dice al compilatore le specifiche del Linkage da usare durante il collegamento del codice. –
Non sono sicuro di aver compreso il tuo esempio in modo completo. Se dichiaro quelle funzioni "C" extern nell'intestazione C++, perché devo dichiararlo di nuovo in C? Non posso semplicemente includere l'intestazione C++ nel mio file C e chiamare direttamente le funzioni? – Pedro
Si può assolutamente chiamare C da C++ - no problemo!
Nel peggiore dei casi, potrebbe essere necessario dichiarare esplicitamente le funzioni chiamate da Pure Data come "extern C". Ma è quasi certo che Pure Data ha già fatto per voi (probabilmente vedrete "extern C" nei file Pure intestazione dati
Ecco maggiori informazioni:.
http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx
'speranza che aiuta
Penso che dalla Q l'OP voglia chiamare C++ da C, non il viceversa. –
Mi piacerebbe usarlo nell'altro modo: chiamare C++ da c. – Pedro
Ma presumibilmente Pure Data, qualunque esso sia, sa solo di C. –
Mettiamola in un altro modo:
1) È possibile chiamare funzioni C, i dati e le librerie dalla sorgente C++, e vi invito C++ fonte da C.
2) Ogni volta che C mette in C fonte ++ tuttavia, quella fonte deve essere scritta in un sottoinsieme C di C++.
3) Parte di questo utilizza "extern C".
4) Un'altra parte sta usando "#ifdef __cplusplus"
5) I collegamenti ho citato sopra dare un sacco di dettagli
6) Ho guardato il Pure Data site. Potrebbe essere necessario apportare alcune "modifiche" al tuo grimorio. Potresti voler creare una nuova intestazione. Fondamentalmente, penso che probabilmente riuscirai a raggiungere il tuo obiettivo di integrare la tua libreria con Pure Data.
IMHO ...
È possibile anche scrivere oggetti per Pure Data utilizzando C++ utilizzando il flext framework.
- 1. Lua Wrapper per C#?
- 2. wrapper C/C++ per Haskell IO monad
- 3. Genera wrapper C da C++?
- 4. Firefox C# Wrapper/Control
- 5. C# Ghostscript Wrapper
- 6. authorize.net C# wrapper/library
- 7. Creazione di un wrapper Objective-C per una libreria C++
- 8. C++ to C Wrapper con SWIG (per FLTK)
- 9. Wrapper C# per API kernel32.dll
- 10. wrapper Python per libreria UDT C++
- 11. wrapper Objective-C iOS per Google Documenti
- 12. wrapper OpenNI C#: WaitAnyUpdateTutti timeout
- 13. Design wrapper di registrazione C++
- 14. C++/CLI wrapper per C++ nativo da utilizzare come riferimento in C#
- 15. C o C++: come funzionano i caricatori/wrapper?
- 16. Come scrivere il mio wrapper in C#?
- 17. strumento per generare wrapper C++ su classe java
- 18. Objective-C wrapper per ODF e ODS (OpenOffice)?
- 19. Esiste un wrapper C# disponibile per Salesforce REST Api?
- 20. Wrapper per uno strumento da riga di comando in C#
- 21. Python, utilizzando ctypes per creare C++ classe wrapper
- 22. Migliore libreria wrapper Cocoa/Objective-C per SQLite su iPhone
- 23. Creazione di un wrapper per una libreria C in Python
- 24. wrapper C++ per funzioni specifiche di posix e linux
- 25. C# .net wrapper per c dll, in particolare lcd (g19 sdk)
- 26. C++ per programmatore Objective-C
- 27. CUDA wrapper per Qt
- 28. Come scrivere il wrapper API REST in C#?
- 29. Genera automaticamente una classe wrapper in C# utilizzando Composizione
- 30. wrapper di algoritmi STL standard/de facto C++
Un po 'tardi, ma ho scritto un piccolo howto su C wrapper per C++: http://www.teddy.ch/c++_library_in_c/ – Teddy