boost python 使用

来源:互联网 发布:软件招标书范本 编辑:程序博客网 时间:2024/06/06 20:44

这两天在用boost python 给服务器搭建一个脚本层,在搭建的过程的过程中,遇到了几个问题。在此记录下,以免以后忘记。

使用:boost_1_51_0  python-2.7.3.msi

1.版本问题。刚开始下载的python 3.2,后来发现程序始终在exec_file出错。折腾了好久,网上查了不少资料,还是没解决,于是换成python-2.7.3后,顺利通过。

不明白为什么。。。

2.编译boost_python-vc90-mt-gd-1_51.dll文件。首先要把project-config.jam里的配置更改下,添加以下几句话,using python 
: 2.7
: c:\\Python27
: c:\\Python27\\include
: c:\\Python27\\libs
;

然后在CMD下用以下命令 bjam --with-python --prefix=d:\boost stage toolset=msvc-10.0 variant=debug link=shared address-model=64 threading=multi runtime-link=shared install

查考:http://www.linuxidc.com/Linux/2011-09/43698.htm

3.C++调用python。

先初始化

Py_Initialize();
char buff[256];
memset(buff,0,256);
::GetCurrentDirectory(256,buff);

char path[256];
memset(path,0,256);


sprintf(path,"%s%s",buff,"\\script\\main.py");


m_Main_module = import("__main__");
m_Main_namespace = (m_Main_module).attr("__dict__");
m_Module = exec_file(path,m_Main_namespace, m_Main_namespace);
object func=(m_Main_namespace)["LoadScriptInfo"];


func();


调用:

object func=(m_Main_namespace)["LoadScriptInfo"];
return  extract<int>(func());


删掉:

Py_Finalize();


4.python 调用C++ 。需单独新建一个.dll工程,把编译后的文件后缀改为.pyd,把生成的.pyd文件和前面生成的boost_python-vc90-mt-gd-1_51.dll拷贝到python目录下的DLLs里。 注意:用 BOOST_PYTHON_MODULE(模块名)初始化模块时,模块名必须等于工程名,否则无法生成正确的.dll初始化函数。


原创粉丝点击