我试图在C中创建一个DLL,该DLL为应用程序运行一些python脚本。我开始在VS10上使用python 3.6。该DLL可以正常工作,但是在我更改为ython 3.7之后,它就停止了运行,就在刚调用Py_Initialize()时。我的应用程序需要在目录上有python 3.7格式的DLL和Lib文件夹,并且还具有可用于链接的python37 DLL。代码如下所示:
#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);
}
该代码应该可以在除我以外的其他计算机上正常工作。我没有解决这个问题的想法。
谢谢!