我已经通过谷歌进行了搜索,并且有许多反驳,但我只看到一个复杂的编码示例,你能给我一个例子(简单代码),所以我能理解。 我已经编码了,但每次运行它都会中断 这是代码
#include <Python.h>
int main()
{
PyObject *pName, *pModule, *pDict, *pFun, *pValue;
// Initialize the Python Interpreter
Py_Initialize();
// Build the name object
pName = PyString_FromString("C:\\Documents and Settings\\MASTER\\My Documents\\Visual Studio 2010\\Projects\\Python\\Test.py");
if(pName)printf("OK");
// Load the module object
pModule = PyImport_Import(pName);
// pDict is a borrowed reference
pDict = PyModule_GetDict(pModule);
// pFunc is also a borrowed reference
pFun = PyDict_GetItemString(pDict, "prinTname");
if (PyCallable_Check(pFun))
{
PyObject_CallObject(pFun, NULL);
} else
{
PyErr_Print();
}
// Clean up
Py_DECREF(pModule);
Py_DECREF(pName);
Py_DECREF(pDict);
Py_DECREF(pFun);
// Finish the Python Interpreter
Py_Finalize();
getchar();
return 0;
}
并且有一些消息 Python.exe中0x1e00503b处的第一次机会异常:0xC0000005:访问冲突读取位置0x00000004。 Python.exe中0x1e00503b处的未处理异常:0xC0000005:访问冲突读取位置0x00000004。 程序'[4548] Python.exe:Native'已退出,代码为0(0x0)。
答案 0 :(得分:2)
以下是我问过的一些问题的代码。这应该做你想要的。
参数数量: argv [1]包含.py文件的路径 argv [2]包含您要调用的函数的名称
int wmain(int argc, wchar_t** argv)
{
PyObject* py_imp_str;
PyObject* py_imp_handle;
PyObject* py_imp_dict; //borrowed
PyObject* py_imp_load_source; //borrowed
PyObject* py_dir; //stolen
PyObject* py_lib_name; //stolen
PyObject* py_args_tuple;
PyObject* py_lib_mod;
PyObject* py_func;
PyObject* py_ret;
Py_Initialize();
//import our python script using the imp library (the normal import doesn't allow you to grab py files in random directories)
py_dir = PyUnicode_FromWideChar(argv[1], wcslen(argv[1]));
py_imp_str = PyString_FromString("imp");
py_imp_handle = PyImport_Import(py_imp_str); //normal python import for imp
py_imp_dict = PyModule_GetDict(py_imp_handle); //borrowed
py_imp_load_source = PyDict_GetItemString(py_imp_dict, "load_source"); //borrowed
py_lib_name = PyUnicode_FromWideChar(argv[2], wcslen(argv[2]));
//setup args for imp.load_source
py_args_tuple = PyTuple_New(2);
PyTuple_SetItem(py_args_tuple, 0, py_lib_name); //stolen
PyTuple_SetItem(py_args_tuple, 1, py_dir); //stolen
//call imp.load_source
py_lib_mod = PyObject_CallObject(py_imp_load_source, py_args_tuple);
py_lib_mod_dict = PyModule_GetDict(py_lib_mod); //borrowed
//get function object
py_func = PyDict_GetItem(py_lib_mod_dict, py_lib_name);
//call function object
py_ret = PyObject_CallFunction(py_func, NULL);
if (py_ret)
{
printf("PyObject_CallFunction from wmain was successful!\n");
Py_DECREF(py_ret);
}
else
printf("PyObject_CallFunction from wmain failed!\n");
Py_DECREF(py_imp_str);
Py_DECREF(py_imp_handle);
Py_DECREF(py_args_tuple);
Py_DECREF(py_lib_mod);
Py_Finalize();
fflush(stderr);
fflush(stdout);
return 0;
}
如果您还没有找到,则以下链接描述了Python的C接口。非常便利: http://docs.python.org/2/c-api/index.html
答案 1 :(得分:0)
你很可能没有安装python dev工具,即从未找到python.h。找到python.h并查找编译错误并重新发布(如果有的话)。
编辑:这是旧信息。包括应该像将include目录添加到include目录一样简单,请参阅:How do I get Visual Express 2010 to find my python.h header file?