boost::python 遇到的一些问题总结

环境:
   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,反正就这样了)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值