Me gustaría usar Pure Data como una herramienta de creación de prototipos para mi propia biblioteca. Descubrí que los parches de Pure Data están escritos en C, pero mi biblioteca está escrita en C++. Entonces, ¿cómo puedo usar este código en datos puros? Como no he utilizado el C simple, me gustaría saber cómo podría escribir un C wrapper para las clases de C++ y, entonces, ¿cómo crear una instancia de mis clases? ¿O tengo que volver a escribir todo en C?Envolvedora C para C++
Respuesta
Usted tendrá que escribir funciones de contenedor para cada función que tiene que ser llamado por ejemplo:!.
// 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 debe ser código C++. El extern "C"
especifica que la función usa las convenciones de nomenclatura C.
En lugar de usar 'void *', debe usar una estructura incompleta para obtener algún tipo de seguridad. –
Para ayudar a comprender mejor, 'extern "Linkage_Specification" {// code} 'De esta manera, uno le dice al compilador la especificación de vinculación que debe usar al vincular el código. –
No estoy seguro de entender completamente su ejemplo. Si declaro esas funciones "C" externas en mi encabezado C++, ¿por qué tengo que declararlas nuevamente en C? ¿No puedo simplemente incluir el encabezado C++ en mi archivo C y llamar las funciones directamente? – Pedro
Puede absolutamente llamar a C desde C++ - ¡no hay problema!
En el peor de los casos, es posible que tenga que declarar explícitamente aquellas funciones que llama desde Pure Data como "extern C". Pero es casi seguro que Pure Data ha hecho ya que para usted (probablemente verá "C extern" en los archivos de cabecera Pure Data
Aquí hay más información:.
http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx
'esperanza de que ayuda
Creo que desde la Q el OP quiere llamar a C++ desde C, no el revés. –
Me gustaría usarlo de otra manera: llamar a C++ desde c. – Pedro
Pero presumiblemente Pure Data, sea lo que sea, solo conoce C. –
Permítanme decirlo de otra manera:
1) Puede llamar a funciones C, datos y bibliotecas de código fuente en C++ y te llamo C++ fuente de C.
2) Siempre C pone en C++ fuente Sin embargo, esa fuente debe escribirse en un subconjunto C de C++.
3) Parte de esto es usar "extern C".
4) Otra parte está utilizando "#ifdef __cplusplus"
5) Los enlaces I citados anteriormente dan un montón de detalles
6) Miré el Pure Data site. Es posible que deba hacer algunos "ajustes" a su biblioteca. Es posible que desee crear un nuevo encabezado. Pero fundamentalmente, creo que probablemente pueda lograr su objetivo de lograr que su biblioteca se integre con Pure Data.
mi humilde opinión ...
También puede escribir objetos para Pure Data usando C++ utilizando el flext framework.
- 1. Opción Parsers para C/C++?
- 2. C vs C++ (Objective-C vs Objective-C++) para iPhone
- 3. Administrado C++ para formar un puente entre C# y C++
- 4. Introducción a C# para usuarios de C/C++
- 5. C# nulo coalescente operador equivalente para C++
- 6. Programación interactiva de consola para c/C++?
- 7. Herramientas de optimización para C y C++
- 8. Procesador XSL-FO para C/C++
- 9. C o C++ para gráficos OpenGL
- 10. Un análogo de C++ FQA para C#
- 11. Desactivar delinear permanentemente para VS2010 (C/C++)
- 12. C++ para el programador Objective-C
- 13. Recursos matemáticos para programadores C/C++
- 14. Jsoup como analizador para C++/C?
- 15. Ejemplos de interfaces C para bibliotecas C++?
- 16. Implementaciones de reducción para C/C++
- 17. Printf para struct? (C/C++, VC2008)
- 18. Google Drive API para C o C++
- 19. C++ wrapper para boost/C++ 11
- 20. Lenguaje de scripting para C/C++?
- 21. C o C++: ¿Bibliotecas para factorizar enteros?
- 22. ¿Qué significa ## para el preprocesador C (C++)?
- 23. Bibliotecas de excepciones para C (no para C++)
- 24. Herramienta automática para verificar convenciones de códigos para C/C++
- 25. Contenedor C++/CLI para C++ nativo para usar como referencia en C#
- 26. Contenedor C# para objetos
- 27. StyleCop para C++
- 28. C#: N Para Loops
- 29. Checkstyle para C#?
- 30. Analizador para C#
Un poco tarde, pero escribí un pequeño tutorial sobre C wrapper para C++: http://www.teddy.ch/c++library_in_c/ – Teddy