Я встраиваю Python в приложение C / C ++, которое будет иметь определенный API.
Приложению необходимо создать экземпляры классов, определенных в скрипте, которые имеют примерно такую структуру:
class userscript1:
def __init__(self):
##do something here...
def method1(self):
## method that can be called by the C/C++ app...etc
В прошлом (для проверки концепции) мне удавалось это сделать, используя следующий тип кода:
PyObject* pName = PyString_FromString("userscript.py");
PyObject* pModule = PyImport_Import(pName);
PyObject* pDict = PyModule_GetDict(pModule);
PyObject* pClass = PyDict_GetItemString(pDict, "userscript");
PyObject* scriptHandle = PyObject_CallObject(pClass, NULL);
Теперь, когда я больше работаюВ среде Pyimport_Import происходит сбой - думаю, это может быть связано с тем, что я пытаюсь добавить каталог к имени скрипта, например,
PyObject* pName = PyString_FromString("E:\\scriptlocation\\userscript.py");
Теперь, чтобы дать вам представление о том, что яЯ пытался, я пытался изменить системный путь перед всеми этими вызовами, чтобы он искал этот модуль.Обычно пытался изменить sys.path программно:
PyObject* sysPath = PySys_GetObject("path");
PyObject* path = PyString_FromString(scriptDirectoryName);
int result = PyList_Insert(sysPath, 0, path);
Эти строки работают нормально, но не влияют на работу моего кода.Очевидно, мой реальный код содержит множество проверок ошибок, которые я исключил, так что не беспокойтесь об этом!
Итак, мой вопрос: как правильно направить встроенный интерпретатор в мои сценарии, чтобы я мог создавать экземпляры классов?