5
그래서 파이썬을 사용하여 공유 C++ 라이브러리의 메소드를 호출합니다. C++에서 Python으로 double을 반환하는 데 문제가 있습니다. 문제를 보여주는 장난감 예제를 만들었습니다. 자유롭게 컴파일하고 사용해보십시오. 여기 파이썬에 C++ double을 반환 하시겠습니까?
# Python imports
from ctypes import CDLL
import numpy as np
# Open shared CPP library:
cpplib=CDLL('./libsoexample.so')
cppobj = cpplib.CPPClass_py()
# Stuck on converting to short**?
x = cpplib.func_py(cppobj)
print 'x =', x
는 C++이다 (soexample.cpp) : 여기서
파이썬 코드 (soexample.py)이다
#include <iostream>
using namespace std;
class CPPClass
{
public:
CPPClass(){}
void func(double& x)
{
x = 1.0;
}
};
// For use with python:
extern "C" {
CPPClass* CPPClass_py(){ return new CPPClass(); }
double func_py(CPPClass* myClass)
{
double x;
myClass->func(x);
return x;
}
}
함께 컴파일 :
g++ -fPIC -Wall -Wextra -shared -o libsoexample.so soexample.cpp
나는 달려 간다 :
$ python soexample.py
x = 0
결과는 유형이 정수이고 값이 0입니다.
참조로 배열을 채우는 것도 궁금합니다. ctypes documentation에서
정말 잘됐다! 'CPPClass_py.restype'를 지정하면 무엇을 의미합니까? – dillerj
@dillerj 수출하는 또 다른 기능입니다. 그것은 restype 사양도 필요합니다. POINTER 및 구조를 확인하십시오. – zch