C ++ - 使用ctypes进行Python绑定 - 在函数中返回多个值

时间:2015-08-05 14:29:29

标签: python c++ binding ctypes

我找到了这个C ++ Python绑定的例子: Calling C/C++ from python? 根据那里的答案,我创建了一些测试文件:

Foo.cpp中:

#include <iostream>
#include <utility>


int bar_2(int a, int b){
    return a*b;
}

std::pair<int, int> divide(int dividend, int divisor)
{
   return std::make_pair(dividend / divisor, dividend % divisor);
}

extern "C" {
    int bar_2_py(int a, int b){ return bar_2(a,b); }
    std::pair<int, int> divide_py(int d, int div){return divide(d,div);}
}

fooWrapper.py:

#!/usr/bin/env python

from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')

def bar_2(a, b):
    res = lib.bar_2_py( a,b )
    return res

def divide(d,div):
    res = lib.divide_py(d,div)
    return res

然后

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o

创建libfoo.so

如果我导入它并在iPython中运行函数,我会得到正确的函数值&#34; bar_2&#34;但是(&部分)错误的答案是&#34;划分&#34;:

from fooWrapper import bar_2, divide
bar_2(10,2) # returns 20, which is right
divide(10,3) # returns 3

显然,返回值适合该对的第一个值(因为10/3 int division为3)。但第二个价值正在迷失。

那么,获得多个值(在这种情况下是2个整数值)的最佳做法是什么?

谢谢!

0 个答案:

没有答案