快速业务通道

C++扩展和嵌入Python

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
e("pyUtil", AllMyMethods); //初始化本模块,并暴露函数
  d = PyModule_GetDict(m);
}

在Python代码中调用这个动态链接库:

import pyUtil
result = pyUtil.Recognise("input url of specific data")
print "the result is: "+ result

用C++为Python写扩展时,如果您愿意使用Boost.Python库的话,开发过程会变得更开心J,要编写一个与上述pyUtil同样功能的动态链接库,只需把文件内容替换为下面的代码。当然,编译需要boost_python.lib支持,运行需要boost_python.dll支持。

#include<string>
#include <boost/python.hpp>
using namespace boost::python;
#pragma comment(lib, "boost_python.lib")
std::string strtmp;
char const* Recognise(const char* url)
{
  strtmp ="从dll中返回的数据... : ";
  strtmp+=url;
  return strtmp.c_str();
}
BOOST_PYTHON_MODULE(pyUtil)
{
  def("Recognise", Recognise);
}

所有示例都在Microsoft Windows XP Professional + Microsoft Visual Studio .NET 2003 + Python2.4环境下测试通过,本文所用的Boost库为1.33版本。

参考资料

[1] Python Documentation Release 2.4.1. 2005.3.30,如果您以默认方式安装了Python2.4,那么该文档的位置在C:\Program Files\Python24\Doc\Python24.chm;

[2] Michael Dawson. Python Programming for the Absolute Beginner. Premier Press. 2003;

[3] Mark Lutz. Programming Python, 2nd Edition. O''''Reilly. 2001.3 ;

[4] Mark Hammond, Andy Robinson. Python Programming on Win32. O''''Reilly. 2000.1 ;

Python主页:http://www.python.org;

Boost库主面:www.boost.org;

附1 text.txt

this is test text in text.txt.

附2 mymod.py

import string
message = ''''original string''''
message =message+message
msg_error=""
try:
    text_file = open("text.txt", "r")
    whole_thing = text_file.read()
    print whole_thing
    text_file.close()
except IOError, (errno, strerror):
    print "I/O error(%s): %s" % (errno, strerror)
def transform(input):
  #input = string.replace(input, ''''life'''', ''''Python'''')
  return string.upper(input)
def change_msg(nul): 
  global message #如果没有此行,message是函数里头的局部变量
  message=''''string changed''''
  return message
def r_file(nul):
  return whole_thing
def get_msg(nul):
return message

附3 simplepy.h

#ifndef _SIMPLEPY_H_
#define _SIMPLEPY_H_
// simplepy.h v1.0
// Purpose: facilities for Embedded Python.
// by hujinshan @2005年9月2日9:13:02
#include
using std::string;
#include
//--------------------------------------------------------------------
// Purpose: ease the job to embed Python into C++ applications
// by hujinshan @2005年9月2日9:13:18
//--------------------------------------------------------------------
class CSimplepy // : private noncopyable
{
public:
  ///constructor
  CSimplepy()
  {
    Py_Initialize();
    pstr=NULL, pmod=NULL, pdict=NULL;
    pfunc=NULL, pargs=NULL;
  }
  ///destructor
  virtual ~CSimplepy()  
  { 
    Py_Finalize();
  }
  ///import the user module
  bool ImportModule(const char* mod_name)
  {
    try{
  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号