Предоставление Python нового типа во время выполнения - PullRequest
1 голос
/ 28 июня 2011

Я прошел и определил мои новые типы, сохранил их в объекте pytype и вызвал следующие функции (после инициализации интерпретатора):

PyType_Ready (); // это берет мой определенный напечатанный

PyModule_AddObject (); // это добавляет определенный тип к модулю, который я создал с помощью PyModule_Create ();

Теперь, когда я пытаюсь использовать тип, который я определил, интерпретатор говорит, что он не существует, поэтому я предполагаю, что есть еще один шаг, который необходимо сделать, чтобы добавить тип во время выполнения, или есть какой-то другой набор шаги, которые я должен предпринять, чтобы достичь этого.

Любая помощь будет принята с благодарностью.

Синтаксическая ошибка Python:

Traceback (most recent call last):
  File "testscript.py", line 1, in <module>
    import Bound
ImportError: No module named Bound

Содержимое тестового скрипта:

import Bound
l = Bound.Foo()

Bound - это имя, которое я определил для модуля, а Foo - это тип, который я пытаюсь определить для целей тестирования.

1 Ответ

2 голосов
/ 29 июня 2011

Итак, я понял, что мне нужно сделать, мне нужно было вызвать функцию до Py_Initialize,

PyImport_AppendInittab( ModuleName, ModuleInitFunction );

Это добавляет имя модуля в словарь модуля Python, поэтому при вызове import ModuleName, если это в первый раз, он вызовет ModuleInitFunction (который я имел, но не использовал в нужном месте), который создает модуль.Теперь, после создания модуля, вы можете приступить к добавлению типов во время выполнения, что я и делаю.

Прямо сейчас я могу успешно связать пользовательские классы C ++ с python во время выполнения, а затем использовать их в скрипте в нашем игровом движке.Прямо сейчас я разрабатываю изломы во время выполнения, но он должен быть запущен в течение следующих нескольких дней.В любом случае, если кто-нибудь решит встроить python в игровой движок для скриптинга, я уверен, что смогу помочь.

...