python3.5 EMBED in C

原创 2016年08月31日 11:22:08

首先吐槽下,python2 跟 3的差别太大了,网上找的embed python的教程大多数都是2.x的

在3.x版本大多不能用,很多函数都不存在了。找了几天的资料终于完成了c ember python基本的调用。

环境准备说明:

1、vc6 + python3.5.2 , 默认安装不会生成python_xx_d.lib ,

         PYTHON安装包安装时需要选择高级模式,全部勾选。然后_d 调试文件都会生成

2、python3.5是vs2015编译的,所以还需要下载 vc14运行环境,调试版的还需要下载vcruntime140d.dll,ucrtbased.dll

========================================================================================

先上python脚本

#coding: utf-8
class mymath:
    def __init__(self,name):
        self.name=name
        print(name)
        
    def add(self,num1,num2):
        print(num1+num2)
        return num1 + num2

    def retTuple(self):
        print (self.name)
        return ("中国人民解放军",231,222.55)

    def retSingleStr(self,egg):
        print (egg+"法拉利")
        
        return "中国人民解放军"
    def retSingleInt(self):
        print (self.name)
        return 231
    def retSingleFloat(self,num1):
        print (self.name)
        return num1 + 231.58

============================================================================================

// pyEmbed.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <assert.h>
#include <Python.h>
#include <windows.h>
#include "pyhelper.hpp"
int main()
{
    CPyInstance hInstance;
    PyObject *pModule, *pClass,*pStuObj;
    ////////////////
    //载入模块pyemb3
    try{
        pModule = PyImport_ImportModule("pyemb3");
        assert(pModule!=NULL);
        //从模块中得到类mymath
        pClass = PyObject_GetAttrString (pModule, "mymath");
        assert(pClass!=NULL);
        PyObject *temp=Py_BuildValue("(s)","JACK!");
        assert(temp!=NULL);
        pStuObj = PyObject_CallObject(pClass, temp);
        ////////////////////////////////////////返回元组
        PyObject *ast = PyObject_CallMethod(pStuObj, "retTuple", "()");
        char *command;
        int amt;
        float nums;
        char szData[]="我不想上幼儿园";
        if (!PyArg_ParseTuple(ast, "sif", &command,&amt,&nums))
        {
            printf("发生错误!");
        }
        Convert(command,command,CP_UTF8,CP_ACP);
        printf("返回元组的函数:%s_%i_%.2f\n",command,amt,nums);
        ////////////////////////调用返回单个字符串的类函数
        Convert(szData,szData,CP_ACP,CP_UTF8);
        ast = PyObject_CallMethod(pStuObj, "retSingleStr", "(s)",szData);
        char *test = PyUnicode_AsUTF8(ast);
        Convert(test,test,CP_UTF8,CP_ACP);
        printf("返回单个字符串函数%s,value: %s\n ",Py_TYPE(ast)->tp_name,test);
        ////////////////////////////返回int 型
        PyObject *result = PyObject_CallMethod(pStuObj, "add", "(ii)", 1, 2);    
        printf("返回INT:1 + 2 = %d\n", PyLong_AsLong(result));
        ////////////////////////////返回FLOAT型
        result = PyObject_CallMethod(pStuObj, "retSingleFloat", "(f)", 3.25);    
        printf("返回float:%.2f\n", PyFloat_AsDouble(result));
    }
    catch(...)
    {
        printf("发生错误!");
    }
    ////////////////
    return 0;
}


最后我有个疑问

************不知道为什么 我没有调用 Py_XDECREF, Py_XDECREF 维护计数器 也没有出现内存泄漏

维护计数器太烦人了,每个变量都这样自行维护真是吐血啊。。。


版权声明:本文为博主原创文章,未经博主允许不得转载。

python_embed_amd64

  • 2016年12月14日 23:22
  • 6.61MB
  • 下载

Embedded Python应用小结

http://www.bloggogo.com/?cat=7 Embedded Python应用小结 Thursday, January 24th, 2008 很久以前就...
  • skyremember
  • skyremember
  • 2008年09月17日 10:41
  • 3429

python3.5 EMBED in C

首先吐槽下,python2 跟 3的差别太大了,网上找的embed python的教程大多数都是2.x的 在3.x版本大多不能用,很多函数都不存在了。找了几天的资料终于完成了c ember pyth...
  • cut001
  • cut001
  • 2016年08月31日 11:22
  • 839

python视频大全

python3英文视频教程(全87集) http://pan.baidu.com/s/1dDnGBvV  Python从入门到精通视频(全60集)链接:http://pan.baidu.com/s/...
  • baiquan17
  • baiquan17
  • 2017年04月07日 11:59
  • 3552

HTML embed标签使用方法和属性详解

一、基本语法   代码如下:   embed src=url   说明:embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU、MP3等等,Netscape及新版的...
  • sightness
  • sightness
  • 2015年08月05日 10:32
  • 23207

embed标签的使用(在网页中播放各种音频视频的插件的使用)

今天做网页播放音频空间,后来上网上一查,原来有embed 标签可以直接使用,用来播放音频视频文件,为方便后人,特总结一下,我是在jsp里用的,不过我想这个冬冬应该是html就行吧,呵呵.播放器插件使用...
  • TomyGuan
  • TomyGuan
  • 2006年11月10日 16:28
  • 22071

用Python处理视频

 jnjhf44680.blog.sohu.com/301848601.html npvdh48820.blog.sohu.com/301848599.html tfhtr84002.blo...
  • u014334501
  • u014334501
  • 2014年03月25日 02:38
  • 221

比较全的python库

http://www.lfd.uci.edu/~gohlke/pythonlibs/ The files are provided "as is" without warranty or supp...
  • hmy1106
  • hmy1106
  • 2015年04月18日 10:49
  • 12340

embed标签属性及用法

原文:http://blog.sina.com.cn/s/blog_67ab2cb80100yluh.html embed标签属性   (一)、基本语法:   embed ...
  • wd4java
  • wd4java
  • 2015年05月04日 13:48
  • 1505

html embed用法 Embed   (一)、基本语法:   embed src=url   说明:embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU、MP3等

html embed用法 Embed    (一)、基本语法:    embed src=url    说明:embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU...
  • LBikang
  • LBikang
  • 2016年10月26日 21:29
  • 241
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python3.5 EMBED in C
举报原因:
原因补充:

(最多只允许输入30个字)