python与C++的互操作

python中使用c++的模块,讲c++的动态链接库文件直接import进来就可以了。在windows下需要将dll文件扩展名修改为.pyd。在linux/unix下直接使用.so就可以了。 c++编写的python的模块都是动态链接库文件。这是在windows下变使用普通函数编写的关键代码: static PyObject *ge(PyObject * self, PyObject * args){ std::string sts; sts = "help me"; return Py_BuildValue("s", sts.c_str() );}//这是处理函数static PyMethodDef allmehod[]={ {"ge", ge, METH_VARARGS}, {NULL, NULL} };//将函数对应给一个python方法#ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport)#else #define DLL_EXPORT __declspec(dllimport)#endifextern "C"DLL_EXPORT void initpyt(){ PyObject *m, *d; m = Py_InitModule("pyt", allmehod); d = PyModule_GetDict(m);}//建立函数字典,暴露函数在windows下面由于PE结构的问题编写动态连接库真的不是太舒服。不过在linux下就好多了,不需要导入导出的处理了,呵呵。 不过c++的准标准库中的boost::python库,更进一步的优化了这一过程。#include<string>#include <boost/python.hpp>using namespace boost::python;#pragma comment(lib, "boost_python.lib")//这里在windows将boost_python.lib链接进来,在linux下去掉这一句在链接时加入静态库boost_python.a的路径就可以了std::string strtmp;char const* fe(){ strtmp ="返回的数据... : "; return strtmp.c_str();}BOOST_PYTHON_MODULE(ge){ def("fe", fe);}呵呵,boost确实很好,很强大!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在protobuf中,可以使用不同语言编写的代码进行相互传递。对于PythonC++之间的相互传递,可以按照以下步骤进行操作: 1. 首先,我们需要使用protobuf协议来定义消息格式。可以使用.proto文件来定义消息结构。 2. 使用protobuf编译器(protoc)将.proto文件编译为对应语言的代码文件。对于Python,可以使用protobuf的python版本来编译。 可以按照中的方法,在protobuf-2.5.0\python目录下运行以下命令编译proto文件: ``` protoc -I=<proto文件所在目录> --python_out=<输出目录> <proto文件名>.proto ``` 这将生成一个.py文件,其中包含生成的Python代码。 3. 对于Python中的编译好的代码文件,可以直接在Python代码中导入并使用。 在Python代码中,需要使用`import`语句导入生成的.py文件,然后使用生成的类来创建和操作消息。 4. 对于C++中的编译好的代码文件,可以按照中的方法进行编译。 首先,确保已经安装了protobuf库。然后,在命令行中使用g++编译器将.proto文件和生成的代码文件进行编译。 ``` g++ -o <输出文件名> <proto文件名>.pb.cc <生成的代码文件名>.cpp -lprotobuf ``` 这将生成一个可执行文件,可以在C++中使用。 5. 在PythonC++之间进行相互传递时,可以使用protobuf提供的序列化和反序列化方法。在Python中,可以使用protobuf生成的类的`SerializeToString()`方法将消息序列化为字符串;在C++中,可以使用protobuf提供的方法将消息序列化为字节流。 在Python中,可以使用protobuf生成的类的`ParseFromString()`方法将接收到的字节流反序列化为消息对象;在C++中,可以使用protobuf提供的方法将接收到的字节流反序列化为消息对象。 这样,就实现了PythonC++之间的protobuf消息的互传。 需要注意的是,在使用protobuf过程中,大小写换问题可能会导致一些错误。如所提到的,默认情况下,protoc会将变量的大小写换为小写字母。在Python中,变量是区分大小写的。因此,在处理大小写问题时需要注意避免出错。 综上所述,即可实现PythonC++之间的protobuf消息互传。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值