Я экспериментировал с внедрением различных языков сценариев в приложение C ++, в настоящее время я пробую Stackless Python 3.1. Я пробовал несколько учебных пособий и примеров, которые я могу найти, чтобы попытаться запустить простой скрипт из приложения.
Py_Initialize();
FILE* PythonScriptFile = fopen("Python Scripts/Test.py", "r");
if(PythonScriptFile)
{
PyRun_SimpleFile(PythonScriptFile, "Python Scripts/Test.py");
fclose(PythonScriptFile);
}
Py_Finalize();
По какой-то странной причине запуск этого фрагмента кода приводит к нарушению доступа по адресу:
PyRun_SimpleFile(PythonScriptFile, "Python Scripts/Test.py");
Я искал в Интернете других с похожей проблемой и нашел только одну. Их единственным решением был обходной путь, который кажется возможным только в более старой версии Python: создание объекта файла python и возврат FILE*
из этого объекта файла python в PyRun_SimpleFile
. Однако такие вызовы функций недоступны, API Python 3.1 создает файловые объекты из файлового дескриптора и возвращает файловые дескрипторы, но функция PyRun_SimpleFile
все еще требует FILE*
.
Я в растерянности относительно того, как запускать любые сценарии из файла, если не считать загрузки всего файла в память вручную и запуска его в виде гигантской строки, что, конечно, не практичное решение.
Что дает? Как я могу выполнить эту задачу, если в API есть внутренняя ошибка?
Обновление:
Мне удалось собрать Stackless Python 3.1 из исходного кода, и все же сбой остался полностью неизменным, несмотря на использование той же библиотеки времени выполнения C. И мой проект, и исходник Stackless Python 3.1 созданы с помощью компилятора Visual Studio 2010 C ++ и среды выполнения C. У меня больше нет никаких мыслей относительно того, что может решить эту проблему, если не считать изменения в Python для использования имени файла, а не ФАЙЛА *. Еще один ужасный обходной путь.