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

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

Я прочитала встраивание Python в другое приложение, хотя это, похоже, говорит только о API C и плоских функциях 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), но кажется, нет никакой документации и есть комментарии в списке задач, как " кто-нибудь читает комментарии thiese [sic] в любом случае? Кто работает над этим проектом?" что не обнадеживает. Но, пожалуйста, не стесняйтесь включать Delphi-конкретные ответы, особенно если вы думаете, что, скорее всего, они будут работать в комбинированном приложении D+CB. Я ценю все ответы, даже если они не совсем идеальны - я могу исследовать, мне просто нужны указатели, куда идти. Собственное решение на C++, вероятно, было бы идеальным, поскольку использование объектов, производных от VCL, имеет свои ограничения.

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

3 ответов


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


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

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

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

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

например, класс автомобиля:

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 обертки с глоток.