我是靠谱客的博主 标致枫叶,最近开发中收集的这篇文章主要介绍cpp调用python_表达式计算之c++调用python,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文使用c++调用python使用简单的计算功能。

vc下新建工程,添加代码:// ExpCalcTest.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "stdio.h"

#include "Python.h"

int main(int argc, char* argv[])

{

char exp[][100] = {"1+3*4-6/2","2*(2+3-1)-(7+12)/3","adf + 30", "100/0 + 10"};

PyObject* pModule = NULL;

PyObject* pCppEval = NULL;

PyObject* pArg = NULL;

PyObject* pResult = NULL;

int nRet = 0;

Py_Initialize();

if (!Py_IsInitialized())

{

printf("初始化python环境出错n");

return -1;

}

pModule = PyImport_ImportModule("cppevalpy");

if(!pModule)

{

printf("导入脚本文件cppevalpy.py出错n");

return -1;

}

pCppEval = PyObject_GetAttrString(pModule, "cppeval");

if(!pCppEval)

{

printf("获得函数cppeval出错n");

return -1;

}

char* sResult = (char*)malloc(100);

for(int i=0;i

{

pArg = Py_BuildValue("(s)", exp[i]);

if(!pArg)

{

printf("构造参数出错n");

return -1;

}

pResult = PyEval_CallObject(pCppEval,pArg);

PyArg_ParseTuple(pResult,"is",&nRet,&sResult);

printf("%d,%sn",nRet,sResult);

}

free(sResult);

Py_Finalize();

return 0;

}

然后需要修改vc的查找目录:

include目录添加{python安装目录}/include

lib目录添加{python安装目录}/libs

因为我的python安装版没有debug版的lib,所以vc工程我选择release版本。

如果需要使用debug版,请到网上下载debug版的lib库,或者自己编译python。

然后在编译生成的可执行程序目录添加脚本文件cppevalpy.py:from __future__ import division

def cppeval(exp):

try:

result = eval(exp)

except Exception, e:

return (-1,str(e))

if isinstance(result,float):

result = round(result,2)

result = str(result)

if result.endswith('.0'):

result = str(int(float(result)))

return (1,result)

在测试程序中故意弄了两个错误看看

最后

以上就是标致枫叶为你收集整理的cpp调用python_表达式计算之c++调用python的全部内容,希望文章能够帮你解决cpp调用python_表达式计算之c++调用python所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部