Я экспериментировал со встраиванием разных языков сценариев в приложение 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");
I Я искал в Интернете других людей с похожей проблемой и нашел только один. Их единственным решением было обходное решение, которое кажется возможным только в более старой версии Python: Создание файлового объекта python и возврат FILE *
из этого файлового объекта python в PyRun_SimpleFile
. Однако такие вызовы функций недоступны, API Python 3.1 создает файловые объекты из файлового дескриптора и возвращает файловые дескрипторы, но функции PyRun_SimpleFile
по-прежнему требуется FILE *
.
I Я не понимаю, как запускать какие-либо сценарии из файла, за исключением загрузки всего файла в память вручную и запуска его как гигантской строки, что, конечно, не является практическим решением.
Что дает? Как я могу выполнить эту задачу, если в API есть внутренняя ошибка?
Обновление: но функция PyRun_SimpleFile
по-прежнему требует FILE *
.
Я не понимаю, как запускать любые скрипты из файла, кроме загрузки всего файла в память вручную и запускать его как гигантскую струну, конечно, не практическое решение.
Что дает? Как я могу выполнить эту задачу, если в API есть внутренняя ошибка?
Обновление: но функция PyRun_SimpleFile
по-прежнему требует FILE *
.
Я не понимаю, как запускать любые скрипты из файла, кроме загрузки всего файла в память вручную и запускать его как гигантскую струну, конечно, не практическое решение.
Что дает? Как я могу выполнить эту задачу, если в API есть внутренняя ошибка?
Обновление: Мне удалось собрать Stackless Python 3.1 из исходников, но сбой остался полностью неизменным, несмотря на использование той же библиотеки времени выполнения C. И мой проект, и исходный код Stackless Python 3.1 созданы с помощью компилятора C ++ Visual Studio 2010 и среды выполнения C. Я больше не имею ни малейшего представления о том, что могло бы решить эту проблему, за исключением модификации Python для использования имени файла, а не FILE *. Еще один ужасный обходной путь.