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

Ответы на вопрос(7)

Ваш ответ на вопрос