Я прошел и определил свои новые типы, сохранил их в pytypeobject и назвал следующие функции (после инициализации интерпретатора):
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 - это тип, который я пытаюсь определить для целей тестирования.
Поэтому я понял, что мне нужно сделать, мне пришлось вызвать функцию перед Py_Initialize
,
PyImport_AppendInittab( ModuleName, ModuleInitFunction );
Это добавляет имя модуля в словарь модуля python, поэтому, когда вы вызываете import ModuleName
, если он в первый раз будет вызывать ModuleInitFunction
(который у меня был, но не использовался в нужном месте), который создает модуль. Теперь, после создания модуля, вы можете продолжить добавлять к нему типы во время выполнения, что и я делаю.
В настоящий момент я могу успешно привязать определенные пользователем классы C++ к python во время выполнения, а затем использовать их в скрипте в нашем Game Engine. Сейчас я разрабатываю перерывы во время выполнения, но он должен быть запущен в течение следующих нескольких дней. В любом случае, если кто-либо еще решит включить python в игровой движок для сценариев, я уверен, что смогу помочь.