Как я должен встроить Python в Разработчике C++ / приложение Delphi 2010 года?

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

Я считал Встраивание Python в Другом Приложении, хотя это, кажется, говорит только о API C и плоских функциях C, не классах или объектах (если я не пропустил что-то), и его раздел "Embedding Python in C ++" является только двумя предложениями долго. Однако я также столкнулся, как использовать повышение:: Python и это выглядят превосходными.

Существует одна проблема: повышение:: Python не поддерживается Разработчиком C++ 2010.

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

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

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

7
задан David 10 August 2010 в 07:13
поделиться

3 ответа

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

8
ответ дан 7 December 2019 в 03:09
поделиться

Открывает внутренние классы или экземпляры объектов в Python как объекты легко, или API действительно C-стиль или плоский / не-объектно-ориентированный, и если да как лучше всего подражать нижележащий объектно-ориентированный слой через такой API?

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

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

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

Например, класс 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 )
1
ответ дан 7 December 2019 в 03:09
поделиться

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

0
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: