如何从Python调用类的C ++函数

时间:2014-05-18 16:46:10

标签: python c++ function wrapping

我尝试使用链接:Calling C/C++ from python?,但我无法做同样的事情,这里我有一个声明extern" C"。请建议假设我有一个名为的函数' function.cpp'我必须在python代码中调用此函数。 function.cpp是:

int max(int num1, int num2) 
 {
  // local variable declaration
  int result;

  if (num1 > num2)
    result = num1;
  else
    result = num2;

  return result; 
 }

然后我如何在python中调用这个函数,因为我是c ++的新手。我听说过#cython'但我不知道。

1 个答案:

答案 0 :(得分:7)

由于您使用C ++,因此请使用extern "C"禁用名称修改(或max将导出为某些奇怪的名称,如_Z3maxii):

#ifdef __cplusplus
extern "C"
#endif
int max(int num1, int num2) 
{
  // local variable declaration
  int result;

  if (num1 > num2)
    result = num1;
  else
    result = num2;

  return result; 
}

将其编译成某个DLL或共享对象:

g++ -Wall test.cpp -shared -o test.dll # or -o test.so

现在您可以使用ctypes调用它:

>>> from ctypes import *
>>>
>>> cmax = cdll.LoadLibrary('./test.dll').max
>>> cmax.argtypes = [c_int, c_int] # arguments types
>>> cmax.restype = c_int           # return type, or None if void
>>>
>>> cmax(4, 7)
7
>>>