Vì vậy, tôi đang sử dụng python để gọi các phương thức trong một thư viện C++ dùng chung. Tôi đang gặp một vấn đề trả lại một đôi từ C + + để python. Tôi đã tạo ra một ví dụ đồ chơi thể hiện vấn đề. Vui lòng biên dịch và dùng thử.Trả lại C++ gấp đôi cho Python?
Đây là mã python (soexample.py):
# 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
Đây là C++ (soexample.cpp):
#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;
}
}
Compile với:
g++ -fPIC -Wall -Wextra -shared -o libsoexample.so soexample.cpp
Khi Tôi chạy được:
$ python soexample.py
x = 0
Vì vậy, kết quả là một số nguyên theo loại và giá trị 0. Điều gì đang xảy ra?
Tôi cũng tò mò về việc điền mảng bằng tham chiếu.
Điều đó hiệu quả! Ý bạn là gì bằng cách chỉ định 'CPPClass_py.restype'? – dillerj
@dillerj là một chức năng khác mà bạn xuất. Nó cũng cần đặc điểm kỹ thuật restype. Kiểm tra POINTER và cấu trúc. – zch