Как включить Python в приложение C ++ Builder / Delphi 2010?

Мне интересно экспериментировать с внедрением Python в моем приложении, чтобы позволить пользователю запускать скрипты Python в среде приложения, получать доступ к внутренним (C ++ – реализованным) объектам и т. Д. Я совершенно новичок в этом, поэтому не знаю точно, что Я делаю.

Я прочитал « Встраивание Python в другое приложение» , хотя, похоже, речь идет только о C API и плоских функциях C, а не о классах или объектах (если только я не пропустил что-то), а в разделе «Вложение Python в C ++» есть только два предложения , Тем не менее, я также сталкивался с тем, как использовать boost :: python, и это выглядит отлично.

Есть одна проблема: boost :: python не поддерживается C ++ Builder 2010 .

Итак, с учетом этого, каков наилучший подход для встраивания Python в приложение C ++, скомпилированного с C ++ Builder 2010, и, используя любую технику, лучше всего, как вы открываете / объединяете классы и объекты, чтобы дать кодеру Python доступ к объектно- ориентированных внутренних компонентов программы? Я пропустил стандартный подход? Является ли выставлять внутренние классы или экземпляры объектов на Python как объекты легкими, или API действительно C-style или flat / non-OO, и если да, то какой лучший подход имитировать базовый уровень OO через такой API?

Примечание. Я использую RAD Studio, которая включает в себя как C ++ Builder, так и Delphi. Возможно, вам удастся использовать какое-то специфическое для Delphi привязку, но те, с которыми я столкнулся, – шесть или семь лет или новы-иш (Python 2.6), но , похоже, не имеют никакой документации и имеют комментарии в списке проблем, например: «Кто-нибудь читает комментарии [sic] в любом случае? Кто-нибудь работает над этим проектом?» что не обнадеживает. Но, пожалуйста, не стесняйтесь включать Delphi-специфические ответы, особенно если вы считаете, что они, вероятно, будут работать в объединенном приложении D + CB. Я ценю все ответы, даже если они не совсем идеальны – я могу исследовать, мне просто нужны указатели на то, куда идти. Естественное решение на C ++, вероятно, было бы идеальным, хотя, поскольку использование VCL-объектов имеет свои собственные ограничения.

Спасибо за ваш вклад!

3 Solutions collect form web for “Как включить Python в приложение C ++ Builder / Delphi 2010?”

Вы не должны бояться проекта P4D в группах google. Он кажется неактивным, потому что, в частности, он уже очень стабилен и полнофункциональен. Эти компоненты используются в гораздо более активном приложении PyScripter, которое является одним из лучших редакторов разработки python, доступных в настоящее время. PyScripter написан в Delphi и использует компоненты P4D. Таким образом, он также представляет собой очень подробный пример того, как использовать компоненты P4D, хотя примеры, предоставленные с помощью проверки исходного кода P4D, уже достаточно хороши для начала работы.

Является ли выставлять внутренние классы или экземпляры объектов на Python как объекты легкими, или API действительно C-style или flat / non-OO, и если да, то какой лучший подход имитировать базовый уровень OO через такой API?

Вы уже ответили сами. Последняя часть предложения верна.

Объекты и классы не существуют на C ++, как только вы компилируете, только несколько структур (vtables), а также другие, объясняющие некоторые данные OO, при условии, что RTTI активирован. Вот почему невозможно преодолеть разрыв между Python и C ++, используя классы и объекты.

Вы можете построить это, безусловно, самостоятельно, создавая набор функций C вместе с некоторыми структурами данных, а затем OO-слой. Но вы не можете сделать это из коробки.

Например, класс Car:

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

Переводится на:

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

И призыв к getDoors:

  c->getDoors() 

Переводится как:

 Car_getDoors( c ) 

Вы можете сгенерировать C ++ для оберток SCRIPTLANG с помощью swig .

Python - лучший язык программирования в мире.