तो मैं साझा सी ++ लाइब्रेरी में कॉल विधियों को कॉल करने के लिए पायथन का उपयोग कर रहा हूं। मुझे सी ++ से अजगर पर एक दोगुना लौटने का मुद्दा है। मैंने एक खिलौना उदाहरण बनाया है जो समस्या को प्रदर्शित करता है। संकलित करने के लिए स्वतंत्र महसूस करें और इसे आज़माएं।वापसी सी ++ पायथन के लिए डबल?
# 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 में एक पूर्णांक है। क्या चल रहा है?
मैं संदर्भ द्वारा सरणी भरने के बारे में भी उत्सुक हूं।
यह बहुत अच्छा काम करता है! 'CPPClass_py.restype' निर्दिष्ट करके आपका क्या मतलब है? – dillerj
@ डिलरज यह एक और काम है जिसे आप निर्यात करते हैं। इसे restype विनिर्देश की भी आवश्यकता है। POINTER और संरचना की जांच करें। – zch