¿Cómo debo incrustar Python en una aplicación C ++ Builder / Delphi 2010?

Estoy interesado en experimentar con la incorporación de Python en mi aplicación, para permitir que el usuario ejecute scripts de Python dentro del entorno de la aplicación, acceda a objetos internos (implementados en C ++), etc. Soy bastante nuevo en esto, así que no sé exactamente qué. Estoy haciendo.

He leído Incrustar Python en otra aplicación , aunque esto parece hablar solo de una API C y funciones C planas, no de clases u objetos (a menos que haya pasado algo por alto) y su sección “Incrustar Python en C ++” solo tiene dos oraciones. . Sin embargo, también encontré cómo usar boost :: python y esto se ve excelente.

Hay un problema: boost :: python no es compatible con C ++ Builder 2010 .

Entonces, dado esto, ¿cuál es el mejor enfoque para incrustar Python en una aplicación de C ++ comstackda con C ++ Builder 2010 y, usando la técnica que sea mejor, cómo expone / integra clases y objetos para dar acceso al codificador de Python al objeto? ¿Orientación interna de un progtwig? ¿Me he perdido un enfoque estándar? ¿Es fácil exponer clases internas u objetos instanciados a Python como objetos, o es la API realmente C-style o flat / non-OO, y si es así, cuál es el mejor enfoque para imitar una capa OO subyacente a través de tal API?

Nota: en realidad uso RAD Studio, que incluye C ++ Builder y Delphi. Puede ser posible usar algún tipo de enlace específico de Delphi, pero los que he encontrado tienen seis o siete años , o son nuevos (Python 2.6) pero no parecen tener ninguna documentación y tienen los comentarios en la lista de temas como “¿Alguien lee los comentarios de thiese [sic] de todos modos? ¿Alguien que esté trabajando en este proyecto?” Lo cual no es alentador. Pero no dude en incluir respuestas específicas de Delphi, especialmente si cree que es probable que funcionen en una aplicación combinada de D + CB. Aprecio todas las respuestas, incluso si no son del todo perfectas: puedo investigar, solo necesito sugerencias sobre dónde ir. Sin embargo, una solución C ++ nativa probablemente sería ideal, ya que el uso de objetos derivados de VCL tiene sus propias limitaciones.

¡Gracias por tu contribución!

No debes tener miedo del proyecto P4D en los grupos de Google. Parece inactivo porque, en parte, ya es muy estable y con todas las funciones. Esos componentes se utilizan en la aplicación PyScripter mucho más activa, que es uno de los mejores editores de desarrollo de Python disponibles en la actualidad. PyScripter está escrito en Delphi y utiliza los componentes P4D. Como tal, también presenta un ejemplo muy completo de cómo usar los componentes de P4D, aunque los ejemplos provistos con la verificación de fuente de P4D ya son lo suficientemente buenos para comenzar.

¿Es fácil exponer clases internas u objetos instanciados a Python como objetos, o es la API realmente C-style o flat / non-OO, y si es así, cuál es el mejor enfoque para imitar una capa OO subyacente a través de tal API?

Ya te has contestado. La última parte de la oración es correcta.

Los objetos y las clases no existen en C ++ en cuanto se comstackn, solo algunas estructuras (vtables), y también otras que explican algunos datos de OO, siempre que se active RTTI. Es por eso que no es posible cerrar la brecha entre Python y C ++ utilizando clases y objetos.

Usted puede construir eso seguramente por sí mismo, creando un conjunto de funciones en C junto con algunas estructuras de datos y luego una capa OO. Pero no puedes hacer eso fuera de la caja.

Por ejemplo, clase de coches:

class Car { public: int getDoors() { return this->doors; } protected: int doors; }; 

Se traduce a:

 struct Car { int doors; }; int Car_getDoors(Car * this) { return this->doors; } 

Y una llamada a getDoors:

  c->getDoors() 

Se traduce como:

 Car_getDoors( c ) 

Puede generar envoltorios de C ++ a $ SCRIPTLANG con swig.