vc中调用python代码
VC调用Python需配置include和lib目录。用Py_Initialize启动解释器,PyRun_SimpleString执行代码,Py_Finalize结束。也可用PyRun_AnyFile接管控制台输入,或通过PyObject、PyArg_Parse读取Python变量值回VC程序。
先看一个最简单的场景:在VC程序中执行一行Python命令。

首先,VC这边的环境配置要搞定——把Python的include目录和lib目录加进项目路径。然后就可以在代码里包含python.h头文件了。
看这段代码,过程其实很直白:先用Py_Initialize()启动Python解释器,接着调用PyRun_SimpleString()直接跑一句Python命令,最后Py_Finalize()收尾。
#include "stdafx.h"
#include "python.h"
int main(int argc, char* argv[])
{
Py_Initialize() ;
PyRun_SimpleString("print('Hello')");
//PyRun_SimpleString("print(dir())");
Py_Finalize();
return 0;
}
编译连接之后,记得把Python31.dll拷贝到exe所在的目录。运行起来,控制台就会输出Hello。
这还只是开胃菜。更常见的情况,是需要连续执行多行Python命令。写法也很自然——依次调用PyRun_SimpleString就行了:
Py_Initialize() ;
PyRun_SimpleString("x=100");
PyRun_SimpleString("print(x)");
PyRun_SimpleString("a=x*x/nprint(a)/n");
Py_Finalize();
这段代码的效果,等价于在Python交互环境里依次敲入:
x=100 print(X) a=x*x print(a)
控制台会依次输出100和10000。
更进一步,还可以让VC程序直接接管Python的控制台输入。这用到了PyRun_AnyFile函数,把stdin传进去就搞定:
#include "stdafx.h"
#include "python.h"
int main(int argc, char* argv[])
{
Py_Initialize() ;
PyRun_AnyFile(stdin,NULL);
Py_Finalize();
return 0;
}
这样VC程序启动后,会直接进入Python交互模式,用户可以在控制台里直接输入Python命令。
真正有意思的,是把Python的变量值读回到VC程序里使用。这需要借助Python的C API对象体系:
char *cstr;
PyObject *pstr;
PyObject *main_dict;
Py_Initialize() ;
PyObject* main_module = PyImport_AddModule("__main__");
main_dict = PyModule_GetDict(main_module);
PyRun_SimpleString("x='abc'");
pstr = PyRun_String("x", Py_eval_input, main_dict, main_dict);
PyArg_Parse(pstr,"s",&cstr); //转换
printf(cstr);
Py_Finalize();
这里的关键步骤有三:先拿到主模块的字典对象作为执行环境,然后用PyRun_String执行表达式来获取PyObject指针,最后通过PyArg_Parse把Python对象转换成C语言的数据类型。这段代码执行后,控制台会输出abc——VC程序成功读取到了Python变量x的值。
这套流程虽然看起来有点绕,但掌握了之后,VC和Python之间的数据交换就变得很灵活了。无论是传递字符串、数值,还是更复杂的数据结构,都可以沿着这个思路去扩展。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















