Почему происходит сбой Python / C API на PyRun_SimpleFile?
Я экспериментировал с внедрением различных языков сценариев в приложение 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 для использования имени файла, а не ФАЙЛА *. Еще один ужасный обходной путь.