Я пытаюсь создать DLL на C, которая запускает некоторые сценарии Python для приложения. Я начал использовать Python 3.6 на VS10. DLL работала, но после того, как я перешел на ython 3.7, он просто остановился, когда вызывался Py_Initialize (). У меня есть папки DLL и Lib из python 3.7 в каталоге, требуемом моим приложением, а также DLL-библиотека python37, доступная для компоновки. Код показан ниже:
#include "python_headers/Python.h"
#include <string.h>
#include <stdio.h>
extern __declspec(dllexport) void __stdcall XMLGenerator(char* diagram)
{
// Local variables
FILE* log;
char *pythonhome, *pythonpath, *pythonhome_bkp, *pythonpath_bkp;
int size_pythonhome, size_pythonpath;
PyObject *module, *function;
log = fopen("Log.txt", "a");
fprintf(log, "Entrou na DLL em C do tradutor.\n");
fclose(log);
// Save current values of Python environment variables
pythonhome_bkp = (char*)malloc((strlen("PYTHONHOME=") + strlen(getenv("PYTHONHOME")) + 1) * sizeof(char));
pythonpath_bkp = (char*)malloc((strlen("PYTHONPATH=") + strlen(getenv("PYTHONPATH")) + 1) * sizeof(char));
strcpy(pythonhome_bkp, "PYTHONHOME=");
strcat(pythonhome_bkp, getenv("PYTHONHOME"));
strcpy(pythonpath_bkp, "PYTHONPATH=");
strcat(pythonpath_bkp, getenv("PYTHONPATH"));
// Set new values for Python environment variables
size_pythonhome = strlen("PYTHONHOME=") + strlen(getenv("PYTHONHOME")) + strlen("/python");
size_pythonpath = size_pythonhome + strlen("/Lib");
pythonhome = (char*)malloc((size_pythonhome + 1) * sizeof(char));
pythonpath = (char*)malloc((size_pythonpath + 1) * sizeof(char));
strcpy(pythonhome, "PYTHONHOME=");
strcat(pythonhome, getenv("PYTHONHOME"));
strcat(pythonhome, "/python");
strcpy(pythonpath, "PYTHONPATH=");
strcat(pythonpath, getenv("PYTHONHOME"));
strcat(pythonpath, "/python/Lib");
putenv(pythonhome);
putenv(pythonpath);
log = fopen("Log.txt", "a");
fprintf(log, "%s\n", pythonhome);
fclose(log);
log = fopen("Log.txt", "a");
fprintf(log, "%s\n", pythonpath);
fclose(log);
free(pythonhome);
free(pythonpath);
// Initialize Python interpreter
Py_Initialize();
// Python imports
PyRun_SimpleString("import sys; sys.path.append('.')");
// Finalize Python interpreter
Py_Finalize();
// Reset Python environment variables
putenv(pythonhome_bkp);
putenv(pythonpath_bkp);
free(pythonhome_bkp);
free(pythonpath_bkp);
}
Этот код должен работать и работать на других компьютерах, кроме моего. У меня закончились идеи для решения этой проблемы.
Спасибо!