曲径通幽

programming_with_fun();

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  18 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

常用链接

留言簿(6)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

环境:
   WinXP-SP3(chs) + VS2010-SP1(en-us) + boost 1.47.0 + python 2.7(ActivePython2.7 携带)

   boost编译时,boost::python库编译为 stage debug release link=static runtime-link=shared

问题1:
   python27 不认dll作为extension
解决方案:
   project的output file 和 extension 都设置为 .pyd

问题2:
   需要在导出类函数时,支持带指针的参数 (重头戏)
解决方案:
   这个问题似乎网上没有一个完整的答案,零零碎碎的问题有一堆,但感觉都不到位,接下来我就给个方案吧。(我对boost::python也不熟,如有错误希望好言指正:) )

 1 #include <boost/python.hpp>
 2 #include <stdio.h>
 3 using namespace boost::python;
 4 
 5 struct World
 6 {
 7     void simpleHello(void)
 8     {
 9         printf("this is simple hello\n");
10     }
11     void hello(int *data)
12     {
13         printf("World say hello :%d\n"*data);
14     }
15     int* ready(void)
16     {
17         return new int(1234);
18     }
19 };
20 
21 BOOST_PYTHON_MODULE(sample)
22 {
23     class_<World>("World")
24     .def("simpleHello"&World::simpleHello)
25     .def("hello"&World::hello, arg("data"))
26     .def("ready"&World::ready, return_value_policy<return_opaque_pointer>())
27     ;
28 }

这里要说明二点:
1)这个例子既有传指针参数,又有返回指针对象,算是把boost::python两个典型问题囊括了。
2)return_opaque_pointer 是我查官方文档后得到的一个变通(官方推荐这里用 manage_new_object,但不管你编不编的过,反正我是编不过,在翻了Reference manual后看到了 opaque_pointer,看名字觉得有戏,就拿来用了。貌似opaque_pointer的严格性更低一点。编译通过,运行OK,反正就这样了)
posted on 2011-09-20 14:29 Meiosis 阅读(2367) 评论(3)  编辑 收藏 引用 所属分类: Windows GenericWork Experience

Feedback

# re: boost::python 遇到的一些问题总结 2013-04-01 00:23 www
在python 中是 如何传递 指针给c++的函数的?  回复  更多评论
  

# re: boost::python 遇到的一些问题总结 2013-04-04 22:25 aaa
在python中 如何调用这个函数: void hello(int *data)?
怎样测试?  回复  更多评论
  

# re: boost::python 遇到的一些问题总结 2013-10-29 00:08 superiori46
我可以封装返回指针的函数,也是使用的你的方法,但是返回的指针在python中无法使用,你是怎么使用的?  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理